我在PHP 5.4.35上。
此代码:
<?php
http_response_code(404);
header('Location: /');
?>
让我的服务器返回这个答案:
HTTP/1.1 302 Moved Temporarily
Date: Sat, 20 Dec 2014 15:06:32 GMT
Server: Apache
X-Powered-By: PHP/5.4.35
Location: /
Content-Length: 0
Keep-Alive: timeout=2, max=200
Connection: Keep-Alive
Content-Type: text/html
404
?修改
根据答案,Location
- 标头会覆盖404
状态代码。由于被调用的页面暂时没有移动但从未存在,我现在提供301 Moved Permanently
状态代码http_response_code(301)
,该代码与Location
- 标题一起使用。
答案 0 :(得分:1)
根据文档,如果您向下发送位置标题,如果它不是201或3xx状态代码,则会产生302.
答案 1 :(得分:1)
您正在发送一个Location
标头,用404 Not Found标头覆盖302 Found/Moved Temporarily。
无论如何,重定向用户而不是显示404都没有意义。我建议您发送404错误代码,以便搜索引擎知道该页面不再存在(并删除重定向)。
并显示一个可点击的链接返回主页(并显示一个网站搜索框),以便错误页面仍可供人类访问者使用。