apache - 将 403 Forbidden 重定向到 404 Not Found 的问题

标签 apache .htaccess mod-rewrite http-status-code-404 http-status-code-403

我的 .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(/?|/.*)$
    

    模板模式适用于所有情况,但是包含仍然为包含中的所有文件生成 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/

    相关文章:

    php - SSL 到非 SSL htaccess 重定向的问题

    apache - 如何防止 Apache httpd (MAMP) 中的 http 文件缓存

    Apache 在充当反向代理时进行重写

    php - CodeIgniter:删除 WAMP 上 URL 中的 "index.php"

    javascript - 使用 InAppBrowser 的 Apache Cordova 重定向

    java - ORA-29531 : no method in class error

    apache 端口 80 非 root

    php - htaccess 使用 cname、vhosts 和 htaccess 将所有子域 + www 重定向到域

    java - tomcat根据请求url设置重定向

    apache - 使用 htaccess 从一个 URL 重定向到另一个 URL