目前,在我的PHP脚本中,当用户尝试访问不存在或不属于该用户的内容时,我将用户重定向到自定义404未找到错误页面。像这样:
header('Location: http://www.mydomain.com/error/notfound/');
exit;
我意识到上面的header()调用默认发送302重定向状态代码。
然而,我不明白的是,我应该发送404未找到的状态代码。在我重定向用户之前?或者当我显示 / error / notfound / 页面时?
感谢您的帮助!
答案 0 :(得分:12)
你应该这样做:
header("HTTP/1.0 404 Not Found");
include 'error.php';
die();
答案 1 :(得分:9)
您根本不会将404错误作为重定向执行。
您真正想要做的是发送404状态标题,然后将当前输出替换为404页面的正文。
有多种方法可以做到这一点,这在很大程度上取决于您网站的结构。 MVC应用程序通常会向前发送。我已经看到其他系统抛出异常,然后注册的异常处理程序负责显示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");
?>
答案 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请求,并且有点讨厌。