2013-09-22 46 views
1

我有我的網站通過.htaccess配置做到這一點:如何在自定義錯誤文檔上發送正確的HTTP響應?

ErrorDocument 403 http://www.mydomain.com/error.php?e=403 
ErrorDocument 401 http://www.mydomain.com/error.php?e=401 
ErrorDocument 400 http://www.mydomain.com/error.php?e=400 
ErrorDocument 500 http://www.mydomain.com/error.php?e=500 

error.php記錄錯誤,並顯示一個用戶/客戶友好的錯誤頁面。

而且,我已經添加了這段代碼:

if($_GET['e'] == '404' || $_GET['e'] == '403' || $_GET['e'] == '500') 
{ $error_no = $_GET['e']; } else { $error_no = '200'; } 
header(' ', true, $error_code); 

所以,當我訪問mydomain.com/pagedoesnotexist我看到的錯誤頁面(但地址欄仍顯示不存在的網址),我收到一份報告,一個404頁的觸發器,但我看了看我的服務器的日誌文件,而這也正是它說: MY.IP.000.00 - - [date and time] "GET /pagedoesnotexistHTTP/1.1" 200 2450 "-" "USERAGENTINFO"

無處在我的服務器日誌中我可以看到約404什麼...只有200 ...... 這是爲什麼?我怎樣才能讓它發回404代碼? 現在我認爲機器人總是能獲得200,這意味着在訪問不存在的網站時可以做出正確的迴應......或者我錯過了什麼?

*和脫離主題:2450代表什麼? O_O *

回答

1

但是請注意,您在設置ErrorDocument不正確,這是造成外部重定向並返回你200而不是404403等設置你的ErrorDocument如下不含域名

ErrorDocument 403 /error.php?e=403 
ErrorDocument 401 /error.php?e=401 
ErrorDocument 400 /error.php?e=400 
ErrorDocument 500 /error.php?e=500 

這將在返回正確的HTTP狀態碼的同時,在瀏覽器中保留原始未找到的URL。

關於你的代碼:

你設置變量$error_noheader()功能使用$error_code。你應該使用:

if($_GET['e'] == '404' || $_GET['e'] == '403' || $_GET['e'] == '500') 
{ $error_no = $_GET['e']; } else { $error_no = '200'; } 
header(' ', true, $error_no); 
+0

AH我是這樣一個虛擬的......謝謝,男人! – olli

+0

很高興它爲你工作。 – anubhava

相關問題