目前在我的PHP脚本中,当用户尝试访问不存在或不属于该用户的内容时,我会将其重定向到自定义的404未找到错误页面。如下:
header('Location: http://www.mydomain.com/error/notfound/');
exit;
我知道上面的header()调用默认会发送302重定向状态码。
然而,我不明白的是什么时候应该发送404未找到状态码。是在重定向用户之前还是在显示“/error/notfound/”页面时?
感谢您的帮助!
目前在我的PHP脚本中,当用户尝试访问不存在或不属于该用户的内容时,我会将其重定向到自定义的404未找到错误页面。如下:
header('Location: http://www.mydomain.com/error/notfound/');
exit;
你应该像这样做:
header("HTTP/1.0 404 Not Found");
include 'error.php';
die();
来自php.net:
有两种特殊情况的头部调用。第一种是以字符串“HTTP/”(大小写不敏感)开头的头部,将用于确定要发送的HTTP状态代码。例如,如果您已经配置了Apache使用PHP脚本来处理缺失文件的请求(使用ErrorDocument指令),您可能希望确保您的脚本生成正确的状态代码。
<?php
header("HTTP/1.0 404 Not Found");
?>
你不能同时使用404和Location:。Location仅适用于某些响应(201和3xx)
但是,你可以将自定义HTML页面作为404响应的正文发送。
“重定向”和“未找到”是不同的概念。
哪个文件可以被找到?
http://www.mydomain.com/error/notfound/
还是
http://www.mydomain.com/not_exist.html
“http://www.mydomain.com/not_exist.html”页面应该有一个404头,并且包含“页面未找到”的内容。
一个快速修复的方法可能是:
header("HTTP/1.0 404 Not Found");
readfile('http://www.mydomain.com/error/notfound/');
exit;
但这需要2个Apache请求,有点不好。