Apache ErrorDocument 指令不起作用

Apache ErrorDocument 指令不起作用

我无法让自定义错误文档适用于 400 Bad Request。这是一台 CentOS LAMP 服务器。

ErrorDocument 400 /badrdoc.html

我曾尝试在以下位置使用上述内容:

  1. Apache http.conf
  2. Apache httpd-vhosts.conf(在每个 vhost 中)
  3. 网站根目录下的 .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

相关内容