Apache 2中的ErrorDocument

2016-11-03 20:59:05 10054

ErrorDocument 指令

说明当遇到错误的时候服务器将给客户端什么样的应答
语法ErrorDocument error-code document
作用域server config, virtual host, directory, .htaccess
覆盖项FileInfo
状态核心(C)
模块core
兼容性在Apache2.0中引用文字的语法发生了变化

当遇到问题或错误的时候,Apache能被配置为进行以下四种处理之一:

输出一个简单生硬的错误代码信息

输出一个经过定制的信息

重定向到一个本地的URL-path来处理这个问题(错误)

重定向到一个外部的URL来处理这个问题(错误)

默认会采取第1种方法,而第2-4种方法可以使用ErrorDocument指令后面跟随一个HTTP应答代码?一个URL或信息来进行配置。Apache有时会额外提供一些信息来描述所发生的问题/错误。

URL可以由一个斜杠(/)开头来指示一个本地URL(相对于DocumentRoot),或是提供一个能被客户端解释的完整的URL。此外还能提供一个可以被浏览器显示的消息。比如:

ErrorDocument 500 http://www.landui.com/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"值可以被用来指定使用Apache内置的、简单的硬编码消息。当不需要这个定制特性的时候,可以用"default"恢复Apache内置的、简单的硬编码消息,否则将继承一个已有的ErrorDocument 。

ErrorDocument 404 /cgi-bin/bad_urls.pl

<Directory /web/docs>
ErrorDocument 404 default
</Directory>

请注意,如果您为ErrorDocument指定了一个外部的URL(比如说,任何在开头指示了类似"http"这样的访问方法的字符串),Apache将会向客户端发送一个重定向指令来告诉它在哪里找到这个文档,哪怕这个文档最后还是在这个服务器上。这里面包含着一些暗示:最重要的就是客户端无法接收到原始的错误状态代码,取而代之的是一个重定向状态代码。这将会使一些用状态代码来判断一个URL是否有效的web机器人或其它客户端产生误解。另外,如果您在"ErrorDocument 401"中使用了外部URL,客户端将不会提示用户输入密码,因为它根本没收到这样一个401的状态代码。所以,如果您想使用"ErrorDocument 401"指令,就必须指向一个本地的文档。

Microsoft Internet Explorer (MSIE)在服务器端产生的错误信息"很小"的时候忽略它们而用自己"友好的"错误信息进行取代。这个大小的阈值根据错误类型而不同。但一般来说,如果您的错误信息的大小在512 byte以上,MSIE就会显示这些服务器端产生的错误文档而不会屏蔽它们。您可以在微软知识库的文章Q294807中获取更多信息。

虽然大多数错误信息可以被改写,但是在有些情况下,将仍然使用某些内置的错误信息而不管ErrorDocument如何设置。特别是在检测到一个"畸形"请求的情况下,正常的请求处理过程将会被立即中断,并且立即返回一个内置的错误信息。这是为了防止某些不良请求可能导致的安全问题。

在2.0版以前,信息前面会用一个不配对的双引号作为前导标志。


提交成功!非常感谢您的反馈,我们会继续努力做到更好!

这条文档是否有帮助解决问题?

非常抱歉未能帮助到您。为了给您提供更好的服务,我们很需要您进一步的反馈信息:

在文档使用中是否遇到以下问题: