咨询热线:4006-75-4006
售前:9:00-23:30 备案:9:00-18:00 技术:7*24h
说明 | 当遇到错误的时候服务器将给客户端什么样的应答 |
---|---|
语法 | 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版以前,信息前面会用一个不配对的双引号作为前导标志。