我们正在从一个子域迁移到另一个子域。此特定域包含多个网站子集。我已设置以下重写来全局处理重定向:
在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 文件,而不必修改每个文件。