我的 .htaccess 的相关部分如下所示:
Options -Indexes
<FilesMatch include>
Order allow,deny
Deny from all
</FilesMatch>
RedirectMatch 404 ^/include(/.*)$
它正在生成以下响应:
通过查看我的模式,我可以看出问题可能在 (/.*) 部分,但我尝试过的一切都给了我相同的结果;我没有一直得到 404,而是在一种情况下得到 404,对其他所有情况得到 403。 我使用的表达式有什么问题?或者,由于我必须对几个目录执行此操作,是否有一种全面的方法可以让我将所有 403 响应转换为 404?
更新:我发现通过删除 FileMatch 可以获得更好的结果,所以我的 .htaccess 现在看起来像这样:
Options -Indexes
RedirectMatch 404 ^/include(/.*)?$ # Added dlamblin's first suggestion
并生成以下响应:
更新:有趣的是,我发现以下会产生不同的输出:
RedirectMatch 404 ^/include(/?|/.*)$
RedirectMatch 404 ^/template(/?|/.*)$
模板模式适用于所有情况,但是包含仍然为包含中的所有文件生成 403(例如/include/config.inc)这可能是目录名称的问题而不是 .htaccess 文件本身的问题吗?
更新:在访问/include/config.inc 时,我的 .htaccess 中的以下内容与重定向冲突。
<FilesMatch config>
Order allow,deny
Deny from all
</FilesMatch>
最佳答案
我可以理解为什么/include 没有被您的 RedirectMatch 捕获,您没有将结尾 '/' 设为可选,但是/include/config.inc 部分有点令人费解。
这是我在 Apache 2.2 上的工作:
<FilesMatch /include(/?|/.*)>
Order allow,deny
Deny from all
</FilesMatch>
RedirectMatch 404 ^/include(/?|/.*)$
这处理这些情况:
/include 404
/include/ 404
/include/config.inc 404
我必须更改 FilesMatch 部分才能使/include 部分正常工作。
编辑:
匹配行也可以在 .htaccess 中没有
关于apache - 将 403 Forbidden 重定向到 404 Not Found 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/548156/