あるサブドメインから別のサブドメインに移行しています。この特定のドメインには、複数の Web サイトのサブセットがあります。リダイレクトをグローバルに処理するために、次の書き換えを設定しました。
(docroot/.htaccess
「ルール#1」)
RewriteEngine On
RewriteCond %{HTTP_HOST} ^virtual\.example\.com$
RewriteRule ^(.*)$ http://events.example.com/$1 [L,R=301]
独自の書き換えルールを持ついくつかのサイトを除き、通常は機能します。たとえば、/roadshow/2015/
次のような包括的なルールがあります。
(docroot/roadshow/2015/.htaccess
「ルール#2」)
RewriteCond %{REQUEST_URI} ^(.*)$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !\.php$
RewriteRule .* framework/main.php?url=%1&%{QUERY_STRING} [L]
問題:以下のページは、/roadshow/2015/
ルール #1 が存在しないかのように読み込まれ続けます。
ここで何が欠けているのでしょうか? :)
答え1
サブフォルダ内の.htaccessファイル内のmod_rewriteディレクティブは親フォルダ内のディレクティブよりも優先されます。RewriteOptions Inherit
各サブフォルダの.htaccessファイルで使用してみてください(http://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewriteoptions)。
Apache 2.4.8 以降を実行している場合は、RewriteOptions InheritDown を使用して、各ファイルを変更するのではなく、すべての子 .htaccess ファイルに自動的に適用できます。