2010-09-11 76 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(); 
?>