Apache HTTP服务器 2.0版本
额外的功能可以让网站管理员自己配置Apache对一些错误和问题的响应。
自定义的响应可以定义为当服务器检测到错误或问题时才被激发。
如果一个脚本执行失败并产生了一个“500 Server Error”的响应,那么这个相应可以被更加友好的提示替换或者干脆就用转向语句转到其他的URL(本地或外部的)。
NCSA httpd 1.3会回应一些对于用户没有任何意义的无聊的老式错误/ 问题信息,而且不会将产生这些错误的原因存入日志。
服务器可以相应以下请求:
当一些信息可以被传递的时候,转向到另外一个URL就变得很有用。这 些信息用于更清楚的解释并且(或者)记录一些错误(问题)产生的原因。
为达到这个目的,Apache将定义一些新的象CGI的环境变量:
REDIRECT_HTTP_ACCEPT=*/*, image/gif, image/x-xbitmap,
image/jpeg
REDIRECT_HTTP_USER_AGENT=Mozilla/1.1b2 (X11; I; HP-UX A.09.05
9000/712)
REDIRECT_PATH=.:/bin:/usr/local/bin:/etc
REDIRECT_QUERY_STRING=
REDIRECT_REMOTE_ADDR=121.345.78.123
REDIRECT_REMOTE_HOST=ooh.ahhh.com
REDIRECT_SERVER_NAME=crash.bang.edu
REDIRECT_SERVER_PORT=80
REDIRECT_SERVER_SOFTWARE=Apache/0.8.15
REDIRECT_URL=/cgi-bin/buggy.pl
请注意REDIRECT_
这个前缀。
至少会有REDIRECT_URL
和
REDIRECT_QUERY_STRING
两个变量会传递到新的URL(假定
这个URL是cgi脚本或者是cgi包含页面)。其他变量将仅在发生错误(问
题)之前存在的情况下才存在。如果你的ErrorDocument
使
用了外部转向(任何类似于http:
开头的
形式,哪怕它仍指向同一个服务器),将没有任何变量将被指
定。
当AllowOverride
进行了相应
的设置后,.htaccess文件将可以使用ErrorDocument
。
以下是一些示例...
ErrorDocument 500 /cgi-bin/crash-recover
ErrorDocument 500 "Sorry, our script crashed. Oh dear"
ErrorDocument 500 http://xxx/
ErrorDocument 404 /Lame_excuses/not_found.html
ErrorDocument 401 /Subscription/how_to_subscribe.html
语法是:
ErrorDocument <3-digit-code> <action>
action可以代表:
Apache转向到URL的行为已经进行了改变,以便对脚本/服务器端包含页 面加入附加的环境变量。
标准CGI变量对于转向的目的脚本来说是可见的。但没有说明转向的来 源。
一批新的环境变量将被初始化并提供给转向目的脚本使用。每个新的
变量都有一个前缀:REDIRECT_
。REDIRECT_
环境变量由转向之前的CGI环境变量创建而来,并被加上了
REDIRECT_
前缀。比如说,
HTTP_USER_AGENT
变成了
REDIRECT_HTTP_USER_AGENT
。在这些新变量之外,Apache
还将定义REDIRECT_URL
和REDIRECT_STATUS
来帮助脚本确定转向的来源。转向的源URL和目的URL都能被记录到access
日志中。
如果ErrorDocument指定了一个本地转向到CGI脚本,这个脚本中应该
在它的输出中包含"Status:
"头部分,用以确保将导致自身被调
用的错误信息返还给客户端。举个例子说:一个Perl的ErrorDocument脚
本应当包含以下代码:
...
print "Content-type: text/html\n";
printf "Status: %s Condition Intercepted\n", $ENV{"REDIRECT_STATUS"};
...
如果有脚本被指定用户处理特定的诸如
404 Not Found
这样的错误,它可以用特定的
错误代码和出错文本来替代。