【发布时间】:2012-05-15 00:57:21
【问题描述】:
当数据库结果为空时(它是产品页面),我尝试同时发送两者。
我现在使用的代码,有效:
header("Status: 404 Not Found");
include_once("404.html");
exit;
我最初尝试的代码不起作用:
header("Status: 404 Not Found");
header("Location: 404.html");
exit;
对于后面的代码,我可以使用其中的任何一个,但不能同时使用两者。换句话说,我可以发送 404 标头并看到它显示在 Wireshark 中,或者我可以发送 Location 标头并重定向,但如果我尝试同时发送两者,则只会发送 404 并且 Location 标头不会重定向。
我已经用一个可行的解决方案解决了问题,但我想知道为什么会这样。
带有 FastCGI 的 Linux 上的 PHP 5.2。
谢谢。
【问题讨论】:
-
Redirect 404 or just 404 header 的可能副本 另请参阅:Is a “404 redirect” a legitimate redirect? 基本上,当您真的发送 404 响应时(尽管它可以完成)是没有意义的意味着重定向(顺便说一句,这对用户来说非常烦人,因为他们无法弄清楚他们错误输入了哪个 URL)。
-
我认为这是对 404 的合法使用。URL 示例是 http://domain.com/goodproduct 会自然发送 200,但如果输入的是旧的或无效的产品 ID, http://domain.com/nonexistentproduct,我想发送 404 并重定向到现有的 404 页面。我正在使用 mod_rewrite 在 PHP 文件上发送 GET 参数,除非存在目录,在这种情况下会改为提供。
-
据我了解,如果页面不存在,404是正确的。如果它曾经存在于当前 URL 但移动到其他地方,则 301 是正确的状态代码。如果它在某个时候确实存在但不再存在,那么 410 (Gone) 可能是合适的。在任何情况下,您都可以显示任何您想要的。您遇到此问题的事实是否表明您可能滥用标头?
-
如果您在上面查看我要完成的工作,我认为我没有滥用它们,我只是想弄清楚为什么我不能发送 404 然后使用 Location标头并重定向页面。正如我所提到的,无论我将它放在代码中 404 标头的上方还是下方,Location 标头都会被忽略。我想发送 404 的原因是,如果产品不再存在或需要从网站(但不是从数据库中)删除,我想发送 404 告诉搜索引擎端的每个人它是消失并为人类显示 404 页面。
标签: php header http-headers http-status-code-404