Apache 2.0 中文文档 |
|
|
|
| 2004-02-11 Apache 译者:kajaa http://www.douzhe.com/ApacheManual/ |
|
| |
问题
在Apache 1.1.1及其早期版本中,是参照文件名而不是URL来建立环境变量 PATH_INFO和SCRIPT_NAME的,其值在多数情况下正确的,但是如果文件系统路径信息超载, 则结果是不确定的。如果配置文件中有如下设置:
Alias /cgi-ralph /usr/local/httpd/cgi-bin/user.cgi/ralph
这里,user.cgi是CGI脚本,"/ralph"信息会被传递给CGI。 当收到"/cgi-ralph/script/"请求时,代码会设置PATH_INFO为"/ralph/script", SCRIPT_NAME为"/cgi-"。显然,后者是错误的,在某些情况下,会导致服务器崩溃。
解决方案
在Apache 1.2版本或更新版本中,则直接参照URL来确定SCRIPT_NAME和PATH_INFO的值, 且判断URL的客户端可修改程度以设置PATH_INFO的值。 对上述例子,PATH_INFO就会被设置为"/script", 而SCRIPT_NAME会被设置为"/cgi-ralph"。 如此,可以避免服务器行为错误,也可以确保 "http://$SERVER_NAME:$SERVER_PORT$SCRIPT_NAME$PATH_INFO" 始终是一个指向正确脚本的有效的URL,而在Apache早期版本中并不能确保。
然而,Alias指令中的信息"/ralph"却很不幸地丢失了。 但是,我们认为使用文件系统来传递这种信息并不可取,脚本也不应该如此运作, Apache 1.2b3以后提供了变通手段。
对早期服务器的兼容
为Apache或其他服务器设计的脚本可能必须要有一个设置为原来的值的PATH_INFO变量。 为此,Apache 1.2(1.2b3或更新)版本增加了一个变量,FILEPATH_INFO,其值与Apache 1.1.1 中PATH_INFO的值相同。
只要简单地判断是否存在FILEPATH_INFO,如果有就用这个, 脚本在Apache 1.2和早期版本中就都能正常运作。例如,用Perl语言可以这样写:
$path_info = $ENV{'FILEPATH_INFO'} || $ENV{'PATH_INFO'};
如此,脚本就可以在所有支持CGI/1.1规范的服务器和Apache的所有版本中正常运作。
|
| |
|
|
| |
|
发表评论
关闭窗口
|
|
|
|