问题描述
我的服务器上有两个 .htaccess 文件。
/public_html/.htaccess
包含一些命令,例如将所有内容重定向到 https://www.
并始终在 url 中添加尾部斜杠。
/public_html/test_path/.htaccess
包含以下代码:
RewriteEngine ON
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+?)/?$ ?id=$1 [L,QSA]
这是重写例如https://www.example.com/test_path?id=123
到 https://www.example.com/test_path/123
。
出于某种原因,/public_html/test_path/.htaccess
中的代码阻止了 /public_html/.htaccess
中的代码被执行。
意味着,/public_html/test_path/.htaccess
中的重写规则有效,但 /public_html/.htaccess
中的代码不再受到尊重,例如不再重定向到 https://www.
。
为什么 /public_html/test_path/.htaccess
中的代码会阻止 /public_html/.htaccess
中的代码也被执行?
解决方法
出于某种原因,/public_html/test_path/.htaccess
中的代码阻止了 /public_html/.htaccess
中的代码被执行。
这是设计使然。如果当前目录有一个带有 RewriteEngine On
的 .htaccess,那么它会覆盖父 .htaccess 指令。
如果您希望在之前应用父 .htaccess 规则,请使用 RewriteOptions
directive:
RewriteOptions InheritBefore
在 RewriteEngine On
行之前。