子目录中 htaccess 中的 RewriteRule

子目录中 htaccess 中的 RewriteRule

Windows 服务器,运行 Apache。在我的 Apache 配置中,我有AllowOverride None一个站点的根目录,然后我将子目录设置为AllowOverride All

<Directory />
    AllowOverride None
</Directory>
<Directory "/safe/">
    AllowOverride All
</Directory>

但是,当我尝试在子目录的文件中设置重写规则时.htaccess,什么也没有发生,只是出现 404 页面未找到错误。示例:

RewriteEngine On
RewriteRule (.*) /blah?test=$1 [R=302,NC,NE,L]

通过 Apache conf 从根目录重写 URL 工作正常。我不明白为什么忽略了该规则。我不想在 conf 中重写 URL,因为在这种情况下,我可能需要不断更改重定向,并且不想每次进行更改时都重新加载服务器。我也不想通过在整个.htaccess站点范围内启用文件(仅在我需要的子目录中启用)来影响服务器性能。

答案1

注意 Apache 配置中的目录和位置标签,它们的含义确实不同。目录适用于文件系统,位置适用于 URI。

如果你正在谈论这样的 URL:http://example.com/safe/index.html你应该这样做:

<Location /safe>
    AllowOverride All
</Location>

相关内容