※ ChatGPTを利用し、要約された質問です(原文:.htaccessでのRewriteRuleが下層ディレクトリに効かない)
.htaccessでのRewriteRuleが下層ディレクトリに効かない
このQ&Aのポイント
.htaccessに記述したRewriteRuleが下層ディレクトリに効かない問題が発生しています。質問者はドメインの統一のために、www有りと無しを統一するためのリダイレクトを設定していますが、下層ディレクトリにあるスクリプトのURL書き換えのためのRewriteRuleを.htaccessに記述してもうまく動作しません。
上層ディレクトリに設定されたRewriteRuleは、下層ディレクトリには継承されません。質問者はRewriteOptions inheritというオプションを試してみましたが、トップページへのリダイレクトが発生しました。共用レンタルサーバで、Apacheのバージョンは1.3.39 (Unix)を使用しています。
質問者は、上層ディレクトリのRewriteRuleを下層ディレクトリに継承する方法を探しています。また、上層ディレクトリのRewriteRuleを継承できない場合、下層ディレクトリの.htaccessにどのように記述すればwww無しのURLになるかも知りたいとしています。
.htaccessでのRewriteRuleが下層ディレクトリに効かない
現在一番上の階層にドメインを適用しており、そこでwww有りと無しを統一する為、.htaccessに以下のように記述しています。
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www\.example\.com)(:80)?
RewriteRule ^(.*) http://example.com/$1 [R=301,L]
これで、http://www.example.com/ は http://example.com へ、
下層ディレクトリの http://www.example.com/sample/ は http://example.com/sample/ と、
上記のようにリダイレクトしてくれますが、下層ディレクトリの中に掲示板スクリプトを設置しているものがありまして、
そのディレクトリ(/bbs)の中にも、スクリプトのURL書き換えの為のRewriteRuleを記述した.htaccessを設置しています。
※このディレクトリ(/bbs)のRewriteRuleには、RewriteCond %{HTTP_HOST} は記述していません。
ここで困った事に、http://www.example.com/bbs/ にアクセスすると、そのままwwwが付いたURLがそのままアドレスバーに表示され、
www無し(http://example.com/bbs/)にリダイレクトしてくれません。
.htaccessを設置していない(RewriteRuleを記述していない)下層ディレクトリは、上層ディレクトリに記述しているRewriteRuleの継承をしてくれる為、http://example.com/sample/ のように表示(リダイレクト)されますが、上記の/bbs ディレクトリなどに対しても、上層のRewriteRule を引き継げる方法は無いでしょうか?
色々調べて、RewriteOptions inherit というのも見つけたのですが、/bbs ディレクトリの.htaccessに記述しても、
トップページ(http://example.com/)へリダイレクトされてしまい、どうすれば良いか悩んでおります。
環境は共用レンタルサーバで、
Apacheのバージョンは1.3.39 (Unix)。
httpd.confは自分では設定する事が出来ません。
上層ディレクトリのRewriteRuleを引き継げない場合、/bbs ディレクトリの.htaccessにはどのように記述すれば
www無し(http://example.com/bbs/)になるのかでも勿論構いません。
もし良い方法がありましたらご教示頂けますと幸いです。
宜しくお願いいたします。
お礼
ご返答が遅れましてもうしわけございません。 ご回答下さいましてありがとうございます! 参考のURLを拝見し、結果としてうまく動作しました。 行ったのは、まずサブディレクトリの.htaccessにはRewriteRuleを書かずに、最上層の.htaccessに記載する事でうまくいきました。 その際のRewriteCond %{REQUEST_URI} がポイントでした。 この度は助かりました。本当にありがとうございました。