我們正在從一個子網域遷移到另一個子網域。該特定網域包含多個網站的子集。我設定了以下重寫來處理全域重定向:
在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 文件,而不必修改每個文件。