【发布时间】:2010-11-17 20:31:43
【问题描述】:
我在代码的某处有一个header('HTTP/1.0 404 Not Found');,但由于某种原因它没有重定向到 Apache 的默认 404 页面。
我在 .htaccess 文件上有一个重写规则,它将每个请求重定向到 index.php。会不会是这个问题?
【问题讨论】:
标签: php apache mod-rewrite http-headers http-status-code-404
我在代码的某处有一个header('HTTP/1.0 404 Not Found');,但由于某种原因它没有重定向到 Apache 的默认 404 页面。
我在 .htaccess 文件上有一个重写规则,它将每个请求重定向到 index.php。会不会是这个问题?
【问题讨论】:
标签: php apache mod-rewrite http-headers http-status-code-404
标题不是告诉 Apache 显示它的 404 页面的原因。相反,当 Apache 显示其 404 页面时,它会同时发送一个 404 标头。标头对浏览器有意义,而不是对服务器有意义。当 Apache 找不到要显示的正确文件时,它会显示 404。由于您在 PHP 脚本中,Apache 已经找到了可以显示的文件,因此不会显示自己的 404 页面。
【讨论】:
在这种情况下,PHP 发送的标头只对浏览器真正重要。 Apache 不会创建自己的页面,因为您已经在处理该页面,如果您发送了某些内容,两者就会发生冲突。
是的,.htaccess 文件将阻止 Apache 显示错误页面,因为您的规则使 Apache 认为它不再有 404 错误,因为它找到了要显示的页面。
发送标头实际上只是“状态消息”,不会使浏览器或服务器显示特定页面。 (尽管大多数浏览器都会)。
正如 Dav 在 cmets 中指出的那样,您需要将 404 错误发送到他们自己的自定义错误页面。
【讨论】: