Apache HTTP Server 版本 2.4
尽管 Apache HTTP Server 在发生 4xx 或 5xx HTTP 状态码时会提供通用的错误响应,但这些响应相当简陋,信息量不足,并且可能让网站用户感到困惑。您可能希望提供自定义错误响应,这些响应要么更友好,要么使用除英语以外的语言,或者可能更符合您的网站布局。
可以为任何被指定为错误条件的 HTTP 状态码定义自定义错误响应,即任何 4xx 或 5xx 状态。
此外,还提供了一组值,以便可以使用 服务器端包含 根据这些变量的值进一步自定义错误文档。或者,您可以让错误条件由 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
必须启用才能使用此功能。