<-
Apache > HTTP Server > 文件 > 版本 2.4

客製化錯誤回應

提供語言:  en  |  es  |  fr  |  ja  |  ko  |  tr 

儘管 Apache HTTP Server 在 4xx 或 5xx HTTP 狀態碼發生時提供一般錯誤回應,但這些回應相當簡略、不具資訊性,並且可能讓網站使用者心生畏懼。您可能想要提供更友善、使用英文以外語言,或樣式與網站版面更協調的客製化錯誤回應。

針對任何指定為錯誤情況的 HTTP 狀態碼 (亦即任何 4xx 或 5xx 狀態),都可以定義自訂錯誤回應。

此外,還提供一組值,讓錯誤文件可以基於這些變數的值,使用 伺服器端包含 來進一步自訂。或者,您可以使用 CGI 程式或其他動態處理常式 (例如 PHP、mod_perl 等等) 來處理錯誤情況,這些程式與處理常式會使用這些變數。

Support Apache!

另請參閱

top

組態

使用 ErrorDocument 指令設定自訂錯誤文件,該指令可以在全域、虛擬主機或目錄內容中使用。如果 AllowOverride 設為 FileInfo,則可以在 .htaccess 檔案中使用該指令。

ErrorDocument 500 "Sorry, our script crashed. Oh dear"
ErrorDocument 500 /cgi-bin/crash-recover
ErrorDocument 500 http://error.example.com/server_error.html
ErrorDocument 404 /errors/not_found.html
ErrorDocument 401 /subscription/how_to_subscribe.html

ErrorDocument 指令的語法為

ErrorDocument <3-digit-code> <action>

其中動作將被視為

  1. 要重新導向的本機 URL (如果動作以「/」開頭)。
  2. 要重新導向的外部 URL (如果動作為有效的 URL)。
  3. 要顯示的文字 (如果沒有上述情形)。如果文字由多個字組成,則必須以引號 (") 括起來。

重新導向到本機 URL 時,會再設定其他環境變數,以便進一步自訂回應。它們不會傳送至外部 URL。

top

可用變數

重新導向至另一個 URL 可能有用,但僅當一些資訊可以傳送出去,之後這些資訊可以被用來更清楚地說明或記錄錯誤狀態時才行。

為了達成這個目的,當發出錯誤重新導向之後,將會設定額外的環境變數,這些變數將從傳送至原始要求的標頭中產生,方法是在原始標頭名稱前面加上「REDIRECT_」。這會提供錯誤文件原始要求的內容。

例如,除了更常見的環境變數之外,您可能會收到以下內容。

REDIRECT_HTTP_ACCEPT=*/*, image/gif, image/jpeg, image/png
REDIRECT_HTTP_USER_AGENT=Mozilla/5.0 Fedora/3.5.8-1.fc12 Firefox/3.5.8
REDIRECT_PATH=.:/bin:/usr/local/bin:/sbin
REDIRECT_QUERY_STRING=
REDIRECT_REMOTE_ADDR=121.345.78.123
REDIRECT_REMOTE_HOST=client.example.com
REDIRECT_SERVER_NAME=www.example.edu
REDIRECT_SERVER_PORT=80
REDIRECT_SERVER_SOFTWARE=Apache/2.2.15
REDIRECT_URL=/cgi-bin/buggy.pl

REDIRECT_ 環境變數是由重新導向之前已存在的環境變數所建立的。它們會重新命名並加上REDIRECT_ 前綴,例如HTTP_USER_AGENT 會變成 REDIRECT_HTTP_USER_AGENT

REDIRECT_URLREDIRECT_STATUSREDIRECT_QUERY_STRING 保證已設定,其他標頭將只會在錯誤狀態之前存在的情況下才會設定。

如果 ErrorDocument 目標是外部重新導向 ( 等以 scheme 名稱開頭的任何內容,即使它指的是與伺服器相同的主機時),這些都不會設定

top

自訂錯誤回應

如果將您的 ErrorDocument 指派到各種動態處理程式(例如伺服端包含文件、CGI 腳本或其他各種處理程式),您可能會希望使用現有的自訂環境變數來自訂此回應。

如果 ErrorDocument 指定一個本地重新導向至 CGI 腳本,腳本應該在其輸出的「Status:」標頭欄位中包含一項,以確保傳送回客戶端造成其呼叫錯誤狀態的訊息。例如,Perl ErrorDocument 腳本可能包含

...
print  "Content-type: text/html\n";
printf "Status: %s Condition Intercepted\n", $ENV{"REDIRECT_STATUS"};
...

如果腳本專門處理特定錯誤狀態,例如 404 Not Found,它可以使用特定程式碼和錯誤文字。

請注意,如果回應包含 Location: 標頭(用於提出客戶端重新導向),腳本必須發出一項適當的 Status: 標頭(例如 302 Found)。否則 Location 標頭可能沒有效果。

top

多語言自訂錯誤文件

在您的 Apache HTTP Server 安裝中,您會取得一份翻譯成 16 種不同語言的自訂錯誤文件目錄。conf/extra 設定目录中還有一個設定檔,可以包含進入來啟用此功能。

在您的伺服器設定檔中,您會看到類似下列的程式碼列

# Multi-language error messages
#Include conf/extra/httpd-multilang-errordoc.conf

取消對此 Include 行的註解將會啟用此功能,並根據客戶端瀏覽器中設定的語言喜好提供以語言協商的錯誤訊息。

此外,這些文件包含各種 REDIRECT_ 變數,以便能向最終使用者提供關於發生了什麼事以及他們現在可以採取什麼動作的更多資訊。

這些文件可以自訂成任何程度,以向使用者提供關於您的網站以及他們可以在其中找到什麼的更多有用資訊。

mod_includemod_negotiation 必需啟用才能使用此功能。

提供語言:  en  |  es  |  fr  |  ja  |  ko  |  tr 

top

註解

注意
這不是問答區段。放在這裡的評論應指向改善文件或伺服器的建議,而我們的審核人員可能會在其實施或被視為無效/離題時將其移除。關於如何管理 Apache HTTP Server 的問題應導向我們的 IRC 頻道,在 Libera.chat 上的 #httpd,或傳送至我們的 郵寄清單