ErrorDocument 400 重定向到不同的 URL,无需重写

ErrorDocument 400 重定向到不同的 URL,无需重写

我想在我的网站上实现一个自定义的错误 400 页面tikolu.net,并将其保存到400.php名为 的文件夹中error

我尝试的第一件事就是直接将其放入ErrorDocument 400 /error/400.php我的.htaccess文件中。这不起作用,因为对于 400 之类的错误,文件无法处理.htaccess,而必须将其放入文件中httpd.conf,如上所述这里

从 Apache 认可的意义上来说,这是可行的,但仍然没有完全发挥作用。默认消息仍然显示,但这次在底部添加了以下内容:Additionally, a 400 Bad Request error was encountered while trying to use an ErrorDocument to handle the request.

这是因为ErrorDocument没有重定向,而只是重写 URL,同时尝试显示400.php。但由于这只是重写,Apache 仍然认为请求的文档与最初导致错误的文档相同,因此再次导致 400 错误。

我所能得到的最远的结果是说ErrorDocument 400 https://tikolu.net/error/400.php。这有效,因为 Apache 无法再次重写 URL(因为它是外部 URL),并且被迫重定向。但是,这对我来说不起作用,因为我需要知道导致错误的原始 URL。我尝试$_SERVER["HTTP_REFERER"]从 PHP 获取,但它是空的。

ErrorDocument指令可以访问一些变量REDIRECT_URL但是只有当目标是内部时才会设置它们,所以在这种情况下它不起作用。

是否有可能使用ErrorDocument但带有适当的重定向,以便可以由 PHP 脚本处理,而不会重复错误?如果没有,是否有办法在重定向到外部位置时使用指令的变量?


.htaccess以下是我的文件的内容:

RewriteEngine On
IndexOptions +Charset=UTF-8

# REMOVE www FROM URL
<If "%{HTTP_HOST} == 'www.tikolu.net'">
    RedirectMatch (.*) https://tikolu.net$1
</If>

# REDIRECT HTTP TO HTTPS
<If "%{HTTPS} == 'off'">
    RedirectMatch (.*) https://tikolu.net$1
</If>

# BLOCK .listing FILE
<Files ~ "\.listing$">
    Require all denied
</Files>

# DIRECTORY INDEXES
DirectoryIndex index.php index.html

# ERROR DOCUMENTS
ErrorDocument 404 /error/404.php
ErrorDocument 403 /error/403.php

# REDIRECTS

(随后出现各种重定向,格式均为RewriteRule location$ /destination [L]

我已暂时禁用我的.htaccess文件(通过重命名),但问题仍然存在。


编辑:我设法找到了一个稍微有点奇怪(但有效)的解决方法:

ErrorDocument 400 '<meta http-equiv="refresh" content="0; URL=/error/400.php">'

相关内容