2010-09-11 74 views
0

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

我试图做到这一点的方法是:

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

分析浏览器中的HTTP响应,响应回来罚款:

HTTP/1.1 404 Not Found 

不过,我想能够输出一个友好的404页面,但是header()函数被忽略之后的任何内容,以及之前的任何内容......那么这将是愚蠢的。

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

谢谢。

+1

为什么不只是在header()之后输出友好的错误页面,例如使用echo?根据我的经验,这种方法是有效的。 – Mewp 2010-09-11 13:22:50

回答

3

您必须确保输出(或ErrorDocument)大于512字节,以确保Internet Explorer不显示它自己的错误页面。这可能是为什么你没有显示标题后经历了任何输出。

0

所以以下(在.htaccess)

ErrorDocument 404 /errordoc.html 

工作不适合你?

编辑:正如你所看到的,你可以很容易地在PHP中扔404,然后在.htaccess中捕获它。

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(); 
?>