2011-12-12 18 views
0

在PHP中有沒有辦法捕獲404找不到?

如果用戶在404上結束,我希望他們被重定向到一個已知頁面,但是如果是由於404錯誤導致顯示不同的內容。

喜歡的東西

if($_SERVER['HTTP_REFERER'] == 404){ 
    echo("You've been redirected!"); 
} 

在此先感謝

+0

請不要重定向錯誤,除非它是永久性的,例如移動到其他網址的頁面。對於真正的錯誤重定向是非常煩人的,因爲你例如不能輕易地修正網址中的錯字或點擊F5。 – ThiefMaster

+0

我在想,如果頁面沒有找到,設置一個標誌,說它導致了404,然後重定向到一個搜索頁面,說'我找不到+查詢',但嘗試搜索等。這是一個壞主意? – Cristian

+0

@ThiefMaster,'mod_rewrite'或其他加載另一個頁面而不更改地址欄的方法,例如'require'。 – FakeRainBrigand

回答

3

PHP只給出路徑,向您推薦當前頁的頁面時,它無法檢索該頁面的狀態代碼。

您不應該需要重定向頁面指定的頁面不存在時。在Apache中,您可以指定ErrorDocument爲PHP文件,只需在文件中追加一個查詢字符串,例如ErrorDocument /index.php?error=404,以便您的PHP文件知道所請求的頁面不存在。這樣,您可以在同一頁面上直接向用戶顯示錯誤,並且URL不會丟失。您不需要會話或服務器變量,只需要$_GET['error']即可檢查是否存在提供給頁面的錯誤代碼。

或者,您可以指定一個預構建的文檔,該文檔只是一個404錯誤頁面,例如ErrorDocument my404error.html,它將在沒有找到任何頁面的服務器端處理的情況下顯示。

+0

完美!它真的沒有跨越我的想法使用PHP GET。非常感謝! – Cristian

+0

然後你可以在404錯誤文檔中使用'header(「Location:$ loc」);'來重定向到你喜歡的頁面。 – 2011-12-12 23:39:26

+0

剛剛嘗試過你所說的,htaccess並沒有通過URL,例如www.example.com/notexists,用htaccess重定向加載正確的頁面,但url仍然是www.example.com/notexists – Cristian