2010-07-11 30 views
2

所以,在我的.htaccess文件我有這樣的ErrorDocument線:如何檢測導致內部服務器錯誤的頁面?

ErrorDocument 500 http://www.example.com/500 

由於我的服務器運行來自同一個核心文件的多個網站,我只想所有內部服務器錯誤重定向到同一頁面處理。但是,我的問題是,它不會發送任何有關導致錯誤的頁面信息,它會重定向頁面。我試圖將其更改爲ErrorDocument 500 index.php?500,但這只是在嘗試查找文件時導致第二個內部服務器錯誤。關於如何將其成功重定向到我的自定義500錯誤頁面,並仍然獲得有關導致錯誤的頁面信息的任何想法?

+0

你想要處理什麼?該來電者信息的用途是什麼? – 2010-07-18 06:13:51

+0

這是錯誤頁面,但是當您在前面包含http時,Apache會重定向到該頁面,而不是停留在發生的URL處,因此沒有關於錯誤的數據。 – animuson 2010-07-18 06:43:40

回答

3

在您的ErrorDocument聲明中,您提供了一個指向遠程頁面的URL。結果,Apache向用戶發送了一個位置標題,並且用戶快樂地離開了。

取而代之的是,將URL更改爲絕對路徑到本地腳本,將處理錯誤:

ErrorDocument 500 /500.php 

腳本應該用一組環境變量的推出開始REDIRECT_應包含不同的路徑並查詢錯誤中涉及的字符串。

無法同時向其他地方發送用戶,也無法捕獲ErrorDocument本身內的信息。另一方面,您的腳本可以捕獲這些信息,然後重定向用戶,如果您仍然因爲某種原因想要這樣處理它的話。

0

檢查您的網絡服務器的訪問日誌。在那裏您將能夠看到哪個請求導致500響應代碼。

在Apache中(使用默認的日誌格式),請求成功(200 OK)看起來是這樣的:

127.0.0.1 - - [19/Jul/2010:18:25:54 +0200] "GET/HTTP/1.1" 200 663 "-" "Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.8pre) Gecko/20100718 Ubuntu/10.04 (lucid) Namoroka/3.6.8pre" 

,結果在一個500的請求看起來是這樣的:

127.0.0.1 - - [19/Jul/2010:18:24:37 +0200] "GET/HTTP/1.1" 500 631 "-" "Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.8pre) Gecko/20100718 Ubuntu/10.04 (lucid) Namoroka/3.6.8pre" 

響應代碼在第六列。

您還可以檢查您的PHP錯誤日誌,其中包含所有PHP錯誤,假設您已啓用錯誤日誌記錄(您應該)。

+0

雖然我不希望在事後檢測到它,但我希望PHP能夠在此處檢測到它,並使用它自己處理。 – animuson 2010-07-19 17:45:02

1

你總是可以看看在HTTP請求的referrer領域,以確定哪個網址打電話的是前

0

Apache服務器日誌中出現的每個錯誤(雖然它是可配置)。您可以在您的PHP網站中使用FileStream打開並管理此文件。請參閱http://httpd.apache.org/docs/2.2/logs.html以查看有關Apache日誌文件的更多信息。您可以從http://www.freewebmasterhelp.com/tutorials/htaccess/獲得有關.htaccess的教​​程。

要進行自己的處理,請創建一個PHP文件,如error.php,它將處理您的錯誤。您可以使用.htaccess文件重定向它。之後,如果你想去一個頁面,你可以通過使用header()方法來實現。

相關問題