我无法让自定义错误文档适用于 400 Bad Request。这是一台 CentOS LAMP 服务器。
ErrorDocument 400 /badrdoc.html
我曾尝试在以下位置使用上述内容:
- Apache http.conf
- Apache httpd-vhosts.conf(在每个 vhost 中)
- 网站根目录下的 .htaccess 文件
它们都不起作用。Apache 正在提供其默认的 400 Bad Request 页面。
有人可以解释一下这个问题吗?
编辑:忘了提及,更改后我重新启动了 Apache。
答案1
我在让自定义 400 错误文档正常工作时遇到了很多麻烦。我将其添加到我的 Apache conf 的顶层:
ErrorDocument 404 /404.html
ErrorDocument 400 /400.html
并在中创建了两个错误文档DocumentRoot
。首先,我使用以下方法测试了 404:
echo -en "GET /foo HTTP/1.0\n\n" | nc 127.0.0.1 80
这返回了我的自定义 404。
然后是 400(请注意,缺少前导斜杠):
echo -en "GET foo HTTP/1.0\n\n" | nc 127.0.0.1 80
响应是默认的 Apache 400。
我确实设法通过将 HTTP 与 HTTPS 虚拟主机对话来找回我的自定义 400:
echo -en "GET / HTTP/1.0\n\n" | nc 127.0.0.1 443
即使你发出了无效的请求,你仍然会得到相同的自定义 400 回复:
echo -en "GET foo HTTP/1.0\n\n" | nc 127.0.0.1 443
不幸的是,对于您的测试,使用 SSL 与非 SSL 虚拟主机通信不会导致任何类型的 400。我仍然没有弄清楚如何让自定义ErrorDocuemnt 400
在端口 80 上发送回。
PS 我记得在某处读到过,在文件ErrorDocument 400
内部无法工作,因为如果请求格式错误,.htaccess
甚至可能无法确定正确性。同样的情况可能也适用于基于名称的虚拟主机。DocumentRoot