<-
Apache > HTTP 服务器 > 文档 > 版本 2.4

自定义错误响应

可用语言:  en  |  es  |  fr  |  ja  |  ko  |  tr 

尽管 Apache HTTP Server 在发生 4xx 或 5xx HTTP 状态码时会提供通用的错误响应,但这些响应相当简陋,信息量不足,并且可能让网站用户感到困惑。您可能希望提供自定义错误响应,这些响应要么更友好,要么使用除英语以外的语言,或者可能更符合您的网站布局。

可以为任何被指定为错误条件的 HTTP 状态码定义自定义错误响应,即任何 4xx 或 5xx 状态。

此外,还提供了一组值,以便可以使用 服务器端包含 根据这些变量的值进一步自定义错误文档。或者,您可以让错误条件由 cgi 程序或其他动态处理程序(PHP、mod_perl 等)处理,这些处理程序利用了这些变量。

Support Apache!

另请参阅

top

配置

自定义错误文档使用 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>

其中操作将被视为

  1. 要重定向到的本地 URL(如果操作以“/”开头)。
  2. 要重定向到的外部 URL(如果操作是有效的 URL)。
  3. 要显示的文本(如果以上都不适用)。如果文本包含多个单词,则必须用引号(")括起来。

重定向到本地 URL 时,会设置额外的环境变量,以便可以进一步自定义响应。它们不会发送到外部 URL。

top

可用变量

重定向到另一个 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_URLREDIRECT_STATUSREDIRECT_QUERY_STRING 保证会被设置,其他标头只有在错误条件之前存在时才会被设置。

如果 ErrorDocument 目标是外部重定向(任何以方案名称开头的,例如 http:,即使它指的是与服务器相同的主机),则不会设置这些变量。

top

自定义错误响应

如果您将 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: 标头可能无效。

top

多语言自定义错误文档

Apache HTTP Server 安装中提供了一个自定义错误文档目录,这些文档翻译成 16 种不同的语言。conf/extra 配置目录中还有一个配置文件可以包含进来以启用此功能。

在您的服务器配置文件中,您将看到类似以下内容的一行

# Multi-language error messages
#Include conf/extra/httpd-multilang-errordoc.conf

取消注释此 Include 行将启用此功能,并根据客户端浏览器中设置的语言首选项提供语言协商错误消息。

此外,这些文档包含各种 REDIRECT_ 变量,以便可以向最终用户提供有关发生情况以及他们现在可以做什么的更多信息。

可以根据需要自定义这些文档,以便向用户提供有关您的网站以及他们可以在那里找到什么内容的更多有用信息。

mod_includemod_negotiation 必须启用才能使用此功能。

可用语言:  en  |  es  |  fr  |  ja  |  ko  |  tr 

top

评论

注意
这不是问答部分。此处发布的评论应指向有关改进文档或服务器的建议,如果这些建议已实施或被认为无效/偏离主题,则可能被我们的版主删除。有关如何管理 Apache HTTP Server 的问题应发送到我们的 IRC 频道 #httpd(在 Libera.chat 上)或发送到我们的 邮件列表