0

给定以下通过 Apache 2.2.9 提供的 PHP 5.1.6 代码:

<?php
header("HTTP/1.1 404 Not Found");

当我浏览到这个文件(使用任何浏览器)时,我会收到一条“连接重置”消息。(Firefox 说“在加载页面时重置了与服务器的连接。”,Chrome 说“与 staging.neopets.com 的连接被中断。”在标头调用之后是否有任何正文没有区别。

httpd.conf具有强制所有请求通过前端控制器脚本运行的重写规则。这就是它多年来的工作方式。前端控制器尝试路由请求,如果不能,它将响应代码设置为 404,显示一些错误副本,然后退出。不管什么原因,今天它决定一发不可收拾就炸了

error.log什么都不显示。 access.log显示作为 404 服务的请求:

192.168.0.2 - - [26/Jan/2012:12:03:11 -0800] "GET /text.php HTTP/1.1" 404 20 "-" "Mozilla/5.0 (X11; Linux i686; rv:8.0.1) Gecko/20100101 Firefox/8.0.1"

Apache 配置已经有几个月没有被修改过。所有其他标头响应都正常工作(401、403、200、302 等),其他一切都完全正常,但由于某种原因,如果我让 PHP 进行上述调用,它会重置连接。

RST,ACK我什至用 Wireshark 看过它,它会在发送请求后发回一大堆数据包。

wget localhost/test.php(从有问题的机器)工作正常,但做wget badhost/test.php(从另一台机器)也显示连接重置错误。也许 Apache 正在对 404 的远程请求进行某种反向 IP 查找并崩溃?

编辑:经过进一步调查,事实证明这是一些网络问题,托管设施和我们办公室之间的 404 因连接重置而被杀死。所以,关闭是因为这里的任何人都无法回答;-) 谢谢!

4

1 回答 1

1

您从 PHP 脚本发送的标头并不是 Apache 显示其 404 页面的原因。Apache 在找不到请求的文件时显示 404 页面(并发送 404 标头)。由于这里不是这种情况(因为找到并执行了 test.php),所以 404 标头没有意义。这可能是让您的浏览器感到困惑的原因。

如果您将此作为某些应用程序错误处理或其他内容的一部分,您应该做的是将用户重定向到应用程序的自定义“找不到文件”页面。

于 2012-01-26T20:19:36.320 回答