【问题标题】:Why doesn't apache show a 404 error when I send a 404 header with php?当我使用 php 发送 404 标头时,为什么 apache 不显示 404 错误?
【发布时间】: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


    【解决方案1】:

    标题不是告诉 Apache 显示它的 404 页面的原因。相反, Apache 显示其 404 页面时,它会同时发送一个 404 标头。标头对浏览器有意义,而不是对服务器有意义。当 Apache 找不到要显示的正确文件时,它会显示 404。由于您在 PHP 脚本中,Apache 已经找到了可以显示的文件,因此不会显示自己的 404 页面。

    【讨论】:

      【解决方案2】:

      在这种情况下,PHP 发送的标头只对浏览器真正重要。 Apache 不会创建自己的页面,因为您已经在处理该页面,如果您发送了某些内容,两者就会发生冲突。

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

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

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

      【讨论】:

      • 所以我应该重定向到我自己的“找不到页面”页面?
      • 是的,如果 PHP 应用程序想要显示这样的消息,通常会这样做。
      • 请不要重定向。它使纠正拼写错误变得更加困难。只需提供一个 404 页面并完成它。
      猜你喜欢
      • 2018-04-29
      • 1970-01-01
      • 2010-10-01
      • 2013-03-28
      • 2015-07-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多