久久首页
免费软件
网络时尚
网络学堂
专题讨论
网络资源
网络游戏
网络文档
网络产品
网站导航: 首页 > 网络服务 > Apache 2.0 中文文档 > CGI环境中PATH_INFO的改变 文档讨论

Apache 2.0 中文文档

后退 CGI环境中PATH_INFO的改变 前进

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的所有版本中正常运作。
 
后退 目录 前进
描述符与Apache 上一级 Apache 2.0开发者文档
 
发表评论 关闭窗口
 相关内容
- Apache的环境变量 2004-02-11
 
 文档分类
操作系统
网络服务
编程语言
数据库
RFC请求注解
基础原理
软件使用
硬件参考
解决方案
 文章搜索
 
网站简介 | 广告服务 | 编程支持 | 设计服务 | 诚邀合作 | 访客留言
Copyright © 1999-2004 99NET. All Rights Reserved
版权所有 久久网络工作室
Email:webmaster@99net.net