将4xx重定向到httpd.conf

时间:2016-03-16 18:03:29

标签: apache .htaccess mod-rewrite httpd.conf

我正在尝试获取任何403请求以200 OK请求转到自定义错误页面(出于安全原因)。

  • 试图将任何4xx错误代码重定向到自定义错误页面

    ErrorDocument 403 /shared/error.html
    

但这不会改变响应代码(它仍然是404)。 有这个选项,但它会给出302 here

  • 试过这个以更改错误代码:

     RewriteEngine on
     RewriteRule ^/shared/.*/$ /shared/error.html [R=200,L]
    

但不知怎的,它并没有重定向到我想要的自定义错误页面。

  • 也用绝对路径尝试:

    RewriteEngine on
    RewriteRule ^/shared/.*/$ https://%{SERVER_NAME}/shared/error.html [R=200,L]
    

仍然无法运作。这是不可能的还是我错过了一些明显的东西?这是我第一次修改,但我已经做了一些研究。任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:1)

如果您可以使用ErrorDocument代码200:

ErrorDocument 200 /shared/error.html
RewriteEngine on
RewriteRule ^/shared/.*/$ anything [R=200]

当应用规则时,它将立即执行重定向到ErrorDocument,这就是你可以在其中放置“任何东西”的原因。

检查R标志(https://httpd.apache.org/docs/current/rewrite/flags.html)的文档:

  

指定的状态代码不一定是重定向(3xx)状态代码。但是,如果状态代码超出重定向范围(300-399),则替换字符串将完全删除,并且重写将停止,就像使用了L一样。

请注意,您可能不希望对整个代码进行此重定向,因此您应该在上下文中应用它。用你的正则表达式取cara,这样你就不会陷入困境。

来源:https://www.askapache.com/htaccess/crazy-advanced-mod_rewrite-tutorial/

答案 1 :(得分:0)

如果您使用php脚本代替静态html文档,则可以覆盖脚本中的响应代码。

请参阅:http://php.net/manual/en/function.http-response-code.php