我正在尝试获取任何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]
仍然无法运作。这是不可能的还是我错过了一些明显的东西?这是我第一次修改,但我已经做了一些研究。任何帮助表示赞赏。
答案 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