尽管在出现4xx或5xx HTTP状态代码的情况下,Apache HTTP Server提供了通用的错误响应,但这些响应相当明显,毫无意义,并且可能使站点用户感到恐惧。您可能希望提供更友好的自定义错误响应,或者以英语以外的其他语言提供自定义错误响应,或者以与您的网站布局更一致的方式提供自定义错误响应。
可以为指定为错误条件的任何HTTP状态代码(即任何4xx或5xx状态)定义定制的错误响应。
此外,还提供了一组值,以便可以使用Server Side Includes基于这些变量的值进一步自定义错误文档。或者,您可以通过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
的目标是
外部重定向(任何开始像一个方案名称http:
,即使它是指在同一台主机作为服务器)。
如果您指向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
必须启用才能使用此功能。