何时发送HTTP状态代码?

时间:2009-05-01 14:10:30

标签: php http header http-headers

目前,在我的PHP脚本中,当用户尝试访问不存在或不属于该用户的内容时,我将用户重定向到自定义404未找到错误页面。像这样:

header('Location: http://www.mydomain.com/error/notfound/');
exit;

我意识到上面的header()调用默认发送302重定向状态代码。

然而,我不明白的是,我应该发送404未找到的状态代码。在我重定向用户之前?或者当我显示 / error / notfound / 页面时?

感谢您的帮助!

6 个答案:

答案 0 :(得分:12)

你应该这样做:

header("HTTP/1.0 404 Not Found");
include 'error.php';
die();

答案 1 :(得分:9)

您根本不会将404错误作为重定向执行。

您真正想要做的是发送404状态标题,然后将当前输出替换为404页面的正文。

有多种方法可以做到这一点,这在很大程度上取决于您网站的结构。 MVC应用程序通常会向前发送。我已经看到其他系统抛出异常,然后注册的异常处理程序负责显示404页面。

无论如何,粗略的步骤是

  1. 确定内容无效
  2. 突破当前执行
  3. 清除任何输出,如果有的话。
  4. 发送404状态标题
  5. 发送404页面的内容

答案 2 :(得分:1)

您不能同时使用404和位置。位置仅对某些响应有效(201和3xx)

但是,您可以将自定义HTML页面作为404响应的正文发送。

答案 3 :(得分:1)

来自php.net:

  

有两种特殊情况的标题调用。第一个是以字符串“HTTP /”开头的标题(大小写不重要),它将用于确定要发送的HTTP状态代码。例如,如果您已将Apache配置为使用PHP脚本来处理丢失文件的请求(使用ErrorDocument指令),则可能需要确保脚本生成正确的状态代码。

<?php
header("HTTP/1.0 404 Not Found");
?>

http://us.php.net/manual/en/function.header.php

答案 4 :(得分:0)

您应该发送404 HTTP状态代码。浏览器和crawlers理解这一点。您可能还希望包含一个更友好的错误页面,解释发生的事情,包括搜索您网站的表单,Soundex链接等。

答案 5 :(得分:0)

“重定向”和“未找到”是不同的概念。

可以找到哪个文件?
http://www.mydomain.com/error/notfound/

http://www.mydomain.com/not_exist.html

http://www.mydomain.com/not_exist.html”页面应包含404标题和“未找到页面”内容。

quickfix可能是:

header("HTTP/1.0 404 Not Found");
readfile('http://www.mydomain.com/error/notfound/');
exit;

但这需要2个apache请求,并且有点讨厌。