当我用php发送404标头时,为什么apache没有显示404错误?

时间:2009-08-07 22:50:07

标签: php apache mod-rewrite http-headers http-status-code-404

我在代码的某处有一个header('HTTP/1.0 404 Not Found');但由于某种原因它没有重定向到Apache的默认404页面。

我在.htaccess文件上有一个重写规则,它将每个请求重定向到index.php。这可能是问题吗?

2 个答案:

答案 0 :(得分:18)

标题不是告诉Apache显示它的404页面的内容。相反, Apache显示其404页面时,它会随之发送404标头。标题意味着对浏览器有意义,而不是服务器。当Apache无法找到要显示的正确文件时,它会显示404。由于您使用的是PHP脚本,因此Apache已经找到了可以显示的文件,因此不会显示自己的404页面。

答案 1 :(得分:7)

在这种情况下,PHP发送的标题只对浏览器有用。 Apache不会创建自己的页面,因为您已经在处理页面,如果您发送了一些内容,那么这两者就会发生冲突。

是的,.htaccess文件将阻止Apache显示错误页面,因为您的规则使Apache认为它不再出现404错误,因为它找到了要显示的页面。 / p>

发送标题实际上只是一个“状态消息”,并不会使浏览器或服务器显示特定页面。 (虽然大多数浏览器都会)。

正如戴维在评论中指出的那样,您需要将404错误发送到他们自己的自定义错误页面。