2009-05-01 78 views
3

當前在我的PHP腳本中,當他/她試圖訪問不存在或不屬於該用戶的內容時,我將用戶重定向到一個自定義的404找不到錯誤頁面。像這樣:何時發送HTTP狀態碼?

header('Location: http://www.mydomain.com/error/notfound/'); 
exit; 

我意識到上面的header()調用默認發送302重定向狀態碼。

然而,我不明白的是,我應該發送404未找到狀態碼。在我重定向用戶之前?或者當我顯示/error/notfound/頁面?

感謝您的幫助!

回答

12

你應該做這樣的事情:

header("HTTP/1.0 404 Not Found"); 
include 'error.php'; 
die(); 
+2

如果瀏覽器使用HTTP/1.1進行連接,會發生什麼情況?是強制Apache與mod_php發回HTTP/1.1響應? – Christian 2011-02-08 09:19:22

1

您不能使用404和位置:在一起。位置僅對某些響應有效(201和3xx)

但是,您可以將自定義HTML頁面作爲404響應的主體發送。

9

根本不執行404錯誤作爲重定向。

你真正想要做的是發送404狀態頭,然後用404頁面的主體替換當前輸出。

有很多種方法可以做到這一點,它取決於您的網站的結構。 MVC應用程序通常將這一點作爲一個前瞻。我見過其他系統拋出異常,然後註冊的異常處理程序負責顯示404頁面。

在任何情況下,粗糙的步驟是

  1. 確定內容無效
  2. 歇了當前執行
  3. 清除任何輸出的,如果有任何。
  4. 發送404個狀態首
  5. 發送404頁的內容
+0

1很好地說明。特別是提到404錯誤不作爲重定向執行,我認爲這是重要的一點。 – 2009-05-01 15:18:00

0

你應該發出一個404 HTTP狀態代碼。瀏覽器和crawlers明白這一點。您可能還想包含一個更友好的錯誤頁面,解釋發生了什麼,包括搜索您網站的表單,Soundex鏈接等。

1

從php.net:

有兩種特殊情況下的頭調用。第一種是以字符串「HTTP /」開頭的字頭(大小寫不重要),它將用於確定要發送的HTTP狀態碼。例如,如果您已將Apache配置爲使用PHP腳本來處理丟失文件的請求(使用ErrorDocument指令),則可能需要確保腳本生成正確的狀態碼。

<?php 
header("HTTP/1.0 404 Not Found"); 
?> 

http://us.php.net/manual/en/function.header.php