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>