2011-10-05 123 views
1

請告訴我爲什麼這不起作用。它正在工作,但莫名其妙地決定停止工作。 在php中,如果找不到頁面,則發出404。htaccess ErrorDocument 404重定向不起作用

if(checkPageExists($escaped_url_page_name)){ 
header('HTTP/1.1: 200 OK'); 
}else{ 
header("HTTP/1.0 404 Not Found"); 
die; 
} 

我的htaccess是

php_flag magic_quotes_gpc Off 

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ /index.php?/$1 [L] 

ErrorDocument 404 /404.php 

404頁上的根,是名404.php。爲什麼五分鐘前它不工作,什麼都沒有改變。我用小提琴測試了這個頁面,它確實拋出了404,但是重定向沒有發生。我已經實現了友好的URL,但我不認爲這會影響它,因爲htaccess中的「/」指的是我認爲的網站的物理根。提前致謝。

+0

這是您的.htaccess文件中的唯一行,還是有其他行可能會影響ErrorDocument行? – Luke

+0

更新整個htaccess – jiraiya

回答

3

我曾經有過類似的問題 - 當PHP拋出404頭時,Apache通常不會爲它創建一個404頁面。 (編輯:它可能與PHP是否輸出任何文本有關,我沒有真正嘗試過它。)如果您在瀏覽器中檢查標題,可以看到404標題起作用,即使頁面爲空。

我不知道有關的自動化解決方案,但我只是做了一個http_error($code)功能,打印我的自定義錯誤頁,並呼籲與header()一起每當我的代碼手動觸發404。然後,我結合一些代碼來ErrorDocument僅呼叫http_error

ErrorDocument 404 index.php?http_error=404 
ErrorDocument 403 index.php?http_error=403 

...等等。

+0

偉大的答案,這幫了我。太感謝了!! – jiraiya