2010-07-01 37 views
1

我正在處理我的自定義PHP網站中不可析的頁面。要做到這一點,我創建這個單行.htaccess文件:PHP:無法更改404狀態代碼,但頭部沒有錯誤()

ErrorDocument 404 /index.php 

在index.php文件的開頭我把這個代碼:

header($_SERVER['SERVER_PROTOCOL'].' 200 OK', true, 200); 

這完美的作品在我的WAMP環境。我檢查HTTP標頭和它拋出:

Status=OK - 200 

但在我的Linux主機我總是得到:

Status=Not Found - 404 

而且奇怪的是,PHP不拋出任何錯誤的。 ..這就像是重寫我的標題。

我需要更改狀態碼頭,否則IE7和IE8不會處理我的結果頁面。其他瀏覽器可以處理這個問題。

也許我需要在.htaccess或php.ini中的東西,但還沒有找到任何相關的東西。或者,如果您知道任何其他方法重定向404並返回200,請告訴我。

+1

爲什麼要將404更改爲200? – Gumbo 2010-07-01 17:08:24

+0

如上所示:「我需要更改狀態碼頭,否則IE7和IE8將不處理我的結果頁面,其他瀏覽器可以處理此問題。」 – cronocr 2010-07-01 18:45:38

回答

2

重寫不存在的頁面的PHP文件的更好的方法是這樣的:

RewriteEngine On 
RewriteCond %{SCRIPT_FILENAME} !-d 
RewriteCond %{SCRIPT_FILENAME} !-f 
RewriteRule (.*) index.php 

這使用了mod_rewrite改變什麼,是不是一個目錄,而不是一個文件到您的PHP腳本。只要記住,如果你的PHP腳本收到一個不存在的東西的請求,它應該發送一個404頭。

+0

是的!它的工作原理,非常感謝! – cronocr 2010-07-01 18:48:11

3

根據Web服務器的配置,可以啓用fast-cgi。您需要一個替代語法(如PHP文檔中所示):

header("Status: 200 OK"); // for fast cgi 
header($_SERVER['SERVER_PROTOCOL'] . " 200 OK"); 
相關問題