上层 .htacces 文件中的代码被其他 .htaccess 文件中的代码忽略

问题描述

我的服务器上有两个 .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=123https://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 行之前。