PHP 404响应头

时间:2010-09-11 13:18:25

标签: php http http-headers http-status-code-404 error-code

我使用.htaccess RewriteRules将url传递给index.php。如果在数据库中找不到指定的页面名称,我希望我的脚本能够发出正确的404响应。

我试图实现这一目标的方式是:

header($_SERVER["SERVER_PROTOCOL"] . " 404 Not Found");

在我的浏览器中分析HTTP响应,响应很好:

HTTP/1.1 404 Not Found 

但是,我希望能够输出一个友好的404页面,但是在header()函数之后的任何内容都会被忽略,以及之前的任何事情......好吧......那都是愚蠢的。

有人可以建议如何从脚本输出404错误消息吗?

感谢。

3 个答案:

答案 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中捕获它。