事象
/.htaccess (トップディレクトリに設置)の設定が、下層ディレクトリの、
/sub/index.html のページで効かない。
原因
下層ディレクトリにも .htaccessを設置し、mod_rewriteの記述をしていた。
そうすると、下層ディレクトリの .htaccess > mod_rewrite の設定しか効かない。
例
/.htaccess の設定内容で以下2つを設定する
- https 矯正リダイレクト(正規化)
- 存在しないページの場合、/sub/index.html にリダイレクト
/sub/.htaccess の設定内容で以下1つを設定する
- 存在しないページの場合、/sub/index.html にリダイレクト
そうすると、/sub/ 配下には、 3番の設定しか効かない。
対応
以下どっちかで対応する。
- サブディレクトリにも、上層で設定したmod_rewrite設定を書く
- 上層に書いた設定と、下層に書いた設定で、設定が重複することになる
- 上層にまとめて書く。
- RewriteBase でそれぞれのディレクトリを指定する
参考
.htaccess に RewriteRule を書くケースでは、そのサブディレクトリ以下のファイルに適用されるべきルールは、すべての必要な変換を完全に書かなくてはならない。
サブディレクトリの.htaccessにはRewriteRuleを書かずに、最上層の.htaccessに記載する事でうまくいきました。
コメント