如何在自定义错误文档上发送正确的HTTP响应?

时间:2013-09-22 03:18:54

标签: php .htaccess http-headers httpresponse errordocument

我通过.htaccess配置了我的网站来执行此操作:

ErrorDocument 403 http://www.mydomain.com/error.php?e=403
ErrorDocument 401 http://www.mydomain.com/error.php?e=401
ErrorDocument 400 http://www.mydomain.com/error.php?e=400
ErrorDocument 500 http://www.mydomain.com/error.php?e=500

error.php记录错误并显示用户/客户友好的错误页面。

另外,我添加了这段代码:

if($_GET['e'] == '404' || $_GET['e'] == '403' || $_GET['e'] == '500' )
{   $error_no = $_GET['e']; } else { $error_no = '200'; }
header(' ', true, $error_code);

所以,当我访问mydomain.com/pagedoesnotexist时,我看到了错误页面(但地址栏仍然显示了不存在的URL),我收到一个404页面被触发的报告,但我查看了我的服务器日志文件,这就是它说的: MY.IP.000.00 - - [date and time] "GET /pagedoesnotexistHTTP/1.1" 200 2450 "-" "USERAGENTINFO"

我的服务器日志中没有任何地方可以看到关于404的任何内容......只有200 ... 为什么会这样?如何让它发送回404代码? 现在我假设机器人等总是得到200,这意味着在访问不存在的网站时可以做出好的反应......或者我错过了什么?

*和主题:2450代表什么? O_O *

1 个答案:

答案 0 :(得分:1)

但请注意,您错误地设置ErrorDocument导致外部重定向并返回200而不是404403等。设置ErrorDocument如下没有域名

ErrorDocument 403 /error.php?e=403
ErrorDocument 401 /error.php?e=401
ErrorDocument 400 /error.php?e=400
ErrorDocument 500 /error.php?e=500

这将在您的浏览器中保留原始未找到的URL,同时返回正确的HTTP状态代码。

关于您的代码:

您在$error_no函数中设置变量$error_code并使用header()。你应该使用:

if($_GET['e'] == '404' || $_GET['e'] == '403' || $_GET['e'] == '500' )
{   $error_no = $_GET['e']; } else { $error_no = '200'; }
header(' ', true, $error_no);