为什么使用PHP发送404头部时,Apache没有显示404错误?

7

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

我在.htaccess文件中有一个Rewrite Rule,将每个请求重定向到index.php。这可能是问题所在吗?

2个回答

19
并不是告诉Apache显示其404页的方法。相反,当Apache显示其404页面时,它会同时发送404头文件。该头文件是为浏览器而设计的,而非服务器。当Apache找不到要显示的正确文件时,它会显示404页面。由于您在PHP脚本中,Apache已经找到了可以显示的文件,因此不会显示自己的404页面。

7
在这种情况下,PHP发送的头信息只对浏览器有影响。Apache不会创建自己的页面,因为您已经在处理页面了,如果您发送了一些内容,它们之间会发生冲突。
是的,.htaccess文件将阻止Apache显示错误页面,因为您的规则使Apache认为它不再存在404错误,因为已找到要显示的页面。
发送标题实际上只是一条“状态消息”,并不会使浏览器或服务器显示特定页面。(尽管大多数浏览器会这样做)。
正如Dav在评论中指出的那样,您将希望将404错误发送到自己的自定义错误页面。

2
那么我应该重定向到自己的“页面未找到”页面吗? - the_drow
4
如果PHP应用程序想要显示这样的消息,通常会这样做。 - Amber
1
请不要重定向。这会使纠正拼写错误变得更加困难。只需提供一个404页面并完成它。 - TRiG

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接