【发布时间】:2010-10-07 14:00:03
【问题描述】:
我的 .htaccess 的相关部分如下所示:
Options -Indexes
<FilesMatch include>
Order allow,deny
Deny from all
</FilesMatch>
RedirectMatch 404 ^/include(/.*)$
它正在生成以下响应:
- /包括403
- /包括/ 404
- /include/config.inc 403
通过查看我的模式,我可以看出问题可能出在 (/.*) 部分,但我尝试过的所有操作都给了我相同的结果;而不是一直得到 404,我得到一个案例的 404 和其他所有案例的 403。 我使用的表达式有什么问题?或者,由于我必须为几个目录执行此操作,是否有一种全面的方法可以让我将所有 403 响应转换为 404?
更新:我发现通过删除 FileMatch 可以获得更好的结果,所以我的 .htaccess 现在看起来像这样:
Options -Indexes
RedirectMatch 404 ^/include(/.*)?$ # Added dlamblin's first suggestion
并生成以下响应:
- /包括404
- /包括/ 404
- /include/config.inc 403
更新:有趣的是,我发现以下会产生不同的输出:
RedirectMatch 404 ^/include(/?|/.*)$
RedirectMatch 404 ^/template(/?|/.*)$
模板模式适用于所有情况,但是 include 仍然为 include 中的所有文件生成 403(例如 /include/config.inc)这可能是目录名称的问题,而不是 .htaccess 的问题文件本身?
更新:在访问 /include/config.inc 时,我的 .htaccess 中的以下内容与重定向冲突。
<FilesMatch config>
Order allow,deny
Deny from all
</FilesMatch>
【问题讨论】:
-
这是很久以前的事了,但我想建议您只需将包含和模板放在文档根目录之外的某个位置即可解决所有这些问题;这是最难搞砸的方法,而且它在 Apache 上的启动负载略少!
-
最快最简单的解决方案,只需要
ErrorDocument指令和一个PHP页面就可以解决404错误:Just usehttp_response_code.不用乱搞RedirectMatch、RewriteEngine等
标签: apache .htaccess mod-rewrite http-status-code-404 http-status-code-403