Apache HTTP Server 版本2.2
Apache可以讓網(wǎng)站管理員自己自定義對(duì)一些錯(cuò)誤和問(wèn)題的響應(yīng)。
自定義的響應(yīng)可以定義為當(dāng)服務(wù)器檢測(cè)到錯(cuò)誤或問(wèn)題時(shí)才被激活。
如果一個(gè)腳本崩潰并產(chǎn)生"500 Server Error"響應(yīng),那么這個(gè)響應(yīng)可以被更友好的提示替換或者干脆用重定向語(yǔ)句跳到其他的URL(本地的或外部的)。
Apache1.3 會(huì)響應(yīng)一些對(duì)于用戶沒(méi)有任何意義的錯(cuò)誤或問(wèn)題信息,而且不會(huì)將產(chǎn)生這些錯(cuò)誤的原因?qū)懭肴罩尽?/p>
服務(wù)器可以被要求作出如下應(yīng)答:
當(dāng)一些信息可以被傳遞的時(shí)候,重定向到另外一個(gè)URL就變得很有用。這些信息用于更清楚的解釋和/或記錄一些錯(cuò)誤或問(wèn)題產(chǎn)生的原因。
為了達(dá)到這個(gè)目的,Apache將定義一些新的類似于CGI環(huán)境變量的環(huán)境變量:
REDIRECT_HTTP_ACCEPT=*/*, image/gif, image/x-xbitmap, image/jpeg
REDIRECT_HTTP_USER_AGENT=Mozilla/1.1b2 (X11; I; HP-UX A.09.05 9000/712)
REDIRECT_PATH=.:/bin:/usr/local/bin:/etc
REDIRECT_QUERY_STRING=
REDIRECT_REMOTE_ADDR=121.345.78.123
REDIRECT_REMOTE_HOST=ooh.ahhh.com
REDIRECT_SERVER_NAME=crash.bang.edu
REDIRECT_SERVER_PORT=80
REDIRECT_SERVER_SOFTWARE=Apache/0.8.15
REDIRECT_URL=/cgi-bin/buggy.pl
請(qǐng)注意"REDIRECT_
"這個(gè)前綴。
至少會(huì)有REDIRECT_URL
和REDIRECT_QUERY_STRING
兩個(gè)變量會(huì)被傳遞到新的URL(假定這個(gè)URL是cgi腳本或者是cgi包含頁(yè)面)。其他變量將僅在發(fā)生錯(cuò)誤或問(wèn)題之前存在的情況下才存在。如果你的ErrorDocument
使用了外部重定向(任何類似于http:
開(kāi)頭的形式,哪怕它仍指向同一個(gè)服務(wù)器),將沒(méi)有任何變量被指定。
當(dāng)對(duì)ErrorDocument
進(jìn)行了相應(yīng)的設(shè)置后,將可以在.htaccess
文件中使用AllowOverride
指令。
以下是一些示例...
ErrorDocument 500 /cgi-bin/crash-recover
ErrorDocument 500 "Sorry, our script crashed. Oh dear"
ErrorDocument 500 http://xxx/
ErrorDocument 404 /Lame_excuses/not_found.html
ErrorDocument 401 /Subscription/how_to_subscribe.html
語(yǔ)法如下:
ErrorDocument <3位錯(cuò)誤代碼> <action>
<action>可以代表:
Apache重定向到URL的行為已經(jīng)進(jìn)行了修改,以便可以在腳本/服務(wù)器端包含頁(yè)面加入額外的環(huán)境變量。
標(biāo)準(zhǔn)CGI變量對(duì)于重定向的目的腳本來(lái)說(shuō)是可見(jiàn)的。但沒(méi)有說(shuō)明重定向的來(lái)源。
一批新的環(huán)境變量將被初始化并提供給重定向的目標(biāo)腳本。每個(gè)新變量都有一個(gè)"REDIRECT_
"前綴。REDIRECT_*
環(huán)境變量由重定向之前的CGI環(huán)境變量創(chuàng)建而來(lái),并被加上了"REDIRECT_
"前綴。比如說(shuō),HTTP_USER_AGENT
變成了REDIRECT_HTTP_USER_AGENT
。在這些新變量之外,Apache還將定義REDIRECT_URL
和REDIRECT_STATUS
來(lái)幫助腳本確定重定向的來(lái)源。重定向的源URL和目的URL都能被記錄到訪問(wèn)日志中。
如果ErrorDocument
指定了一個(gè)到本地CGI腳本的重定向,該腳本應(yīng)當(dāng)在它的輸出中包含一個(gè)"Status:
"頭字段以確保將導(dǎo)致調(diào)用它的錯(cuò)誤條件始終返回客戶端。舉例來(lái)說(shuō),一個(gè)Perl ErrorDocument
腳本可能包含如下內(nèi)容:
...
print "Content-type: text/html\n";
printf "Status: %s <中斷條件>\n", $ENV{"REDIRECT_STATUS"};
...
如果該腳本專門用于處理一個(gè)特定的錯(cuò)誤條件,比如:404 Not Found
,它就可以使用特定的代碼和錯(cuò)誤文本進(jìn)行替代。
需要注意的是如果應(yīng)答包含一個(gè)"Location:
"頭(為了進(jìn)行一個(gè)客戶端重定向),腳本必須發(fā)出一個(gè)適當(dāng)?shù)?Status:
"頭(比如:302 Found
)。否則"Location:
"頭可能無(wú)效。