Apache HTTP Server 版本 2.4
儘管 Apache HTTP Server 在 4xx 或 5xx HTTP 狀態碼發生時提供一般錯誤回應,但這些回應相當簡略、不具資訊性,並且可能讓網站使用者心生畏懼。您可能想要提供更友善、使用英文以外語言,或樣式與網站版面更協調的客製化錯誤回應。
針對任何指定為錯誤情況的 HTTP 狀態碼 (亦即任何 4xx 或 5xx 狀態),都可以定義自訂錯誤回應。
此外,還提供一組值,讓錯誤文件可以基於這些變數的值,使用 伺服器端包含 來進一步自訂。或者,您可以使用 CGI 程式或其他動態處理常式 (例如 PHP、mod_perl 等等) 來處理錯誤情況,這些程式與處理常式會使用這些變數。
使用 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>
其中動作將被視為
重新導向到本機 URL 時,會再設定其他環境變數,以便進一步自訂回應。它們不會傳送至外部 URL。
重新導向至另一個 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_URL
、REDIRECT_STATUS
和 REDIRECT_QUERY_STRING
保證已設定,其他標頭將只會在錯誤狀態之前存在的情況下才會設定。
如果 ErrorDocument
目標是外部重新導向 ( 等以 scheme 名稱開頭的任何內容,即使它指的是與伺服器相同的主機時),這些都不會設定。
如果將您的 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
標頭可能沒有效果。
在您的 Apache HTTP Server 安裝中,您會取得一份翻譯成 16 種不同語言的自訂錯誤文件目錄。conf/extra
設定目录中還有一個設定檔,可以包含進入來啟用此功能。
在您的伺服器設定檔中,您會看到類似下列的程式碼列
# Multi-language error messages #Include conf/extra/httpd-multilang-errordoc.conf
取消對此 Include
行的註解將會啟用此功能,並根據客戶端瀏覽器中設定的語言喜好提供以語言協商的錯誤訊息。
此外,這些文件包含各種 REDIRECT_
變數,以便能向最終使用者提供關於發生了什麼事以及他們現在可以採取什麼動作的更多資訊。
這些文件可以自訂成任何程度,以向使用者提供關於您的網站以及他們可以在其中找到什麼的更多有用資訊。
mod_include
和 mod_negotiation
必需啟用才能使用此功能。