說(shuō)明 | 當(dāng)遇到錯(cuò)誤的時(shí)候服務(wù)器將給客戶端什么樣的應(yīng)答 |
---|
語(yǔ)法 | ErrorDocument error-code document |
---|
作用域 | server config, virtual host, directory, .htaccess |
---|
覆蓋項(xiàng) | FileInfo |
---|
狀態(tài) | 核心(C) |
---|
模塊 | core |
---|
兼容性 | 在Apache2.0中引用文字的語(yǔ)法發(fā)生了變化 |
---|
當(dāng)遇到問(wèn)題或錯(cuò)誤的時(shí)候,Apache能被配置為進(jìn)行以下四種處理之一:
輸出一個(gè)簡(jiǎn)單生硬的錯(cuò)誤代碼信息
輸出一個(gè)經(jīng)過(guò)定制的信息
重定向到一個(gè)本地的URL-path來(lái)處理這個(gè)問(wèn)題(錯(cuò)誤)
重定向到一個(gè)外部的URL來(lái)處理這個(gè)問(wèn)題(錯(cuò)誤)
默認(rèn)會(huì)采取第1種方法,而第2-4種方法可以使用ErrorDocument指令后面跟隨一個(gè)HTTP應(yīng)答代碼?一個(gè)URL或信息來(lái)進(jìn)行配置。Apache有時(shí)會(huì)額外提供一些信息來(lái)描述所發(fā)生的問(wèn)題/錯(cuò)誤。
URL可以由一個(gè)斜杠(/)開(kāi)頭來(lái)指示一個(gè)本地URL(相對(duì)于DocumentRoot),或是提供一個(gè)能被客戶端解釋的完整的URL。此外還能提供一個(gè)可以被瀏覽器顯示的消息。比如:
ErrorDocument 500 http://www.tjdsmy.cn/cgi-bin/tester
ErrorDocument 404 /cgi-bin/bad_urls.pl
ErrorDocument 401 /subscription_info.html
ErrorDocument 403 "Sorry can't allow you access today"
另外,特殊的"default"值可以被用來(lái)指定使用Apache內(nèi)置的、簡(jiǎn)單的硬編碼消息。當(dāng)不需要這個(gè)定制特性的時(shí)候,可以用"default"恢復(fù)Apache內(nèi)置的、簡(jiǎn)單的硬編碼消息,否則將繼承一個(gè)已有的ErrorDocument 。
ErrorDocument 404 /cgi-bin/bad_urls.pl
<Directory /web/docs>
ErrorDocument 404 default
</Directory>
請(qǐng)注意,如果您為ErrorDocument指定了一個(gè)外部的URL(比如說(shuō),任何在開(kāi)頭指示了類似"http"這樣的訪問(wèn)方法的字符串),Apache將會(huì)向客戶端發(fā)送一個(gè)重定向指令來(lái)告訴它在哪里找到這個(gè)文檔,哪怕這個(gè)文檔最后還是在這個(gè)服務(wù)器上。這里面包含著一些暗示:最重要的就是客戶端無(wú)法接收到原始的錯(cuò)誤狀態(tài)代碼,取而代之的是一個(gè)重定向狀態(tài)代碼。這將會(huì)使一些用狀態(tài)代碼來(lái)判斷一個(gè)URL是否有效的web機(jī)器人或其它客戶端產(chǎn)生誤解。另外,如果您在"ErrorDocument 401"中使用了外部URL,客戶端將不會(huì)提示用戶輸入密碼,因?yàn)樗緵](méi)收到這樣一個(gè)401的狀態(tài)代碼。所以,如果您想使用"ErrorDocument 401"指令,就必須指向一個(gè)本地的文檔。
Microsoft Internet Explorer (MSIE)在服務(wù)器端產(chǎn)生的錯(cuò)誤信息"很小"的時(shí)候忽略它們而用自己"友好的"錯(cuò)誤信息進(jìn)行取代。這個(gè)大小的閾值根據(jù)錯(cuò)誤類型而不同。但一般來(lái)說(shuō),如果您的錯(cuò)誤信息的大小在512 byte以上,MSIE就會(huì)顯示這些服務(wù)器端產(chǎn)生的錯(cuò)誤文檔而不會(huì)屏蔽它們。您可以在微軟知識(shí)庫(kù)的文章Q294807中獲取更多信息。
雖然大多數(shù)錯(cuò)誤信息可以被改寫,但是在有些情況下,將仍然使用某些內(nèi)置的錯(cuò)誤信息而不管ErrorDocument如何設(shè)置。特別是在檢測(cè)到一個(gè)"畸形"請(qǐng)求的情況下,正常的請(qǐng)求處理過(guò)程將會(huì)被立即中斷,并且立即返回一個(gè)內(nèi)置的錯(cuò)誤信息。這是為了防止某些不良請(qǐng)求可能導(dǎo)致的安全問(wèn)題。
在2.0版以前,信息前面會(huì)用一個(gè)不配對(duì)的雙引號(hào)作為前導(dǎo)標(biāo)志。