我使用.htaccess RewriteRules将url传递给index.php。如果在数据库中找不到指定的页面名称,我希望我的脚本能够发出正确的404响应。
我试图实现这一目标的方式是:
header($_SERVER["SERVER_PROTOCOL"] . " 404 Not Found");
在我的浏览器中分析HTTP响应,响应很好:
HTTP/1.1 404 Not Found
但是,我希望能够输出一个友好的404页面,但是在header()函数之后的任何内容都会被忽略,以及之前的任何事情......好吧......那都是愚蠢的。
有人可以建议如何从脚本输出404错误消息吗?
感谢。
答案 0 :(得分:3)
您必须确保输出(或ErrorDocument)大于512字节,以确保Internet Explorer不显示它自己的错误页面。这可能是您在标题未显示后经历任何输出的原因。
答案 1 :(得分:1)
<?php
header("HTTP/1.0 404 Not Found");
echo "<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 2.0//EN\">
<html><head>
<title>404 Not Found</title>
</head><body>
<h1>Not Found</h1>
<p>The requested URL " . $_SERVER['REQUEST_URI'] . " was not found on this server.</p>
<hr>
<address>Apache/2.2.3 (CentOS) Server at " . $_SERVER['SERVER_NAME'] . " Port 80</address>
</body></html>";
exit();
?>
答案 2 :(得分:0)
所以关注(在.htaccess中)
ErrorDocument 404 /errordoc.html
不适合你吗?
编辑:如您所见,您可以轻松地在PHP中输入404,然后在.htaccess中捕获它。