0

我在 Windows/IIS/PHP 虚拟主机上实现自定义 404 错误页面时遇到问题。每当我尝试在标头中发送 404 状态消息时,都不会向客户端发送任何内容,而是显示一个空白页面。

这是我正在使用的一个非常简单的脚本:

<?php
  header('HTTP/1.1 404 Not Found');
  header('Status: 404 Not Found');
  var_dump(headers_list());
?>

在我的开发机器上,输出(显示在浏览器中)是

array(2) { [0]=>  string(23) "X-Powered-By: PHP/5.2.6" [1]=>  string(21) "Status: 404 Not Found" }

在我的主机上没有输出。我似乎无法生成除了空白页面之外的任何内容,无论 PHP 回显什么内容,或者作为普通 HTML 包含在下面,尽管 PHP 处理(例如日志记录、数据库写入等)继续正常进行。

谁能建议问题可能是什么或如何解决?

4

6 回答 6

5

“空白页”闻起来像是 error_reporting(0) 隐藏了您会收到的错误消息。也许在您的标题之前有一些输出,这会引发错误。检查那个。

于 2009-04-13T15:47:34.260 回答
2

如果在 PHP 标记之后放置文本会怎样?

此外,请确保您的脚本没有在主机上出错,无论是检查 apache 错误日志、在脚本上运行 php -l 还是打开 error_reporting 和 display_errors。

于 2009-04-13T14:29:51.857 回答
2

如果在您的主机上将 PHP 配置为通过 CGI 运行,则可能无法在 IIS 中生成 404 错误页面(除非撒谎并返回 200 OK,这是一件坏事)。当然,我无法说服 IIS 4-6.0 允许我的 CGI 404 错误通过浏览器。

无论如何,您通常不希望 PHP 运行 CGI,还有其他相关问题以及速度缓慢。在 IIS 上,应该首选 PHP ISAPI 扩展(尽管我没有尝试过,我无法确认它解决了这个特定问题)。

于 2009-04-13T16:31:50.037 回答
1

我对 Linux 上的 PHP 5.2.6 有同样的问题。我发现 Web 服务器没有打印前 8109 个字节。

IE6 忽略长度小于 512 字节的自定义错误页面。这可能是对这个问题的解释,但可能您已经在多个浏览器中进行了测试。

于 2009-08-20T08:14:19.513 回答
0

检查您的主机是否允许您使用 PHP 动态更改标头。我的主机不允许我通过 PHP 设置 404 标头,尽管其他标头(301,内容类型)很好。

于 2009-04-13T20:01:04.323 回答
0

我的建议是不要自己设置 HTTP/1.1 404 标头,让 Web 服务器为您完成。

传统上,这是通过 Status 标头完成的,Web 服务器应将其转换为 HTTP/1.0 或 1.1 404 Not Found 标头。

(旁注:Status标头不是真正的 HTTP 标头,仅用于将信息从应用程序传递到服务器本身。)

于 2009-04-13T20:21:43.850 回答