为什么有些PHP安装有$#u SERVER[';SCRIPT#u URI';]而其他安装没有?

为什么有些PHP安装有$#u SERVER[';SCRIPT#u URI';]而其他安装没有?,php,apache2,Php,Apache2,我运行两台Apache2服务器。一个有PHP5.2,另一个有PHP5.3。5.3机器上有$\u服务器['SCRIPT\u URI']的原因是什么 这个变量来自哪里?这显然是来自Apache环境的东西,PHP手册中没有记录。但是,它是一个方便的快捷方式,它是['HTTPS']、['SERVER\u NAME']和['REQUEST\u URI']组合的一个快捷方式 我试着浏览配置文件,搜索SO和web。根据一份来自mod_rewrite的报告: 加 重新启动引擎 到您的httpd.conf文件中的

我运行两台Apache2服务器。一个有PHP5.2,另一个有PHP5.3。5.3机器上有
$\u服务器['SCRIPT\u URI']
的原因是什么

这个变量来自哪里?这显然是来自Apache环境的东西,PHP手册中没有记录。但是,它是一个方便的快捷方式,它是
['HTTPS']
['SERVER\u NAME']
['REQUEST\u URI']
组合的一个快捷方式

我试着浏览配置文件,搜索SO和web。

根据一份来自mod_rewrite的报告:

重新启动引擎

到您的httpd.conf文件中的虚拟主机,您要将其 打开,然后重新启动apache


据我所知,
$\u服务器['SCRIPT\u URI']
仅在您作为CGI运行PHP时可用。我想这一定是您的两个PHP安装的不同之处。

我使用PLEXK12、PHP5.6.6迁移到CentOS 7,并在等上重写。 脚本还没有出现。 因为在某些情况下使用它非常好,我写了这个变通方法:

if(!isset($_SERVER['SCRIPT_URI'])){
    $_SERVER['SCRIPT_URI'] = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on' ? 'https://' : 'http://').$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];

    $pos = strrpos($_SERVER['SCRIPT_URI'],'/');
    if($pos!==false) {
        $_SERVER['SCRIPT_URI'] = substr($_SERVER['SCRIPT_URI'], 0, $pos+1);
    }
}

由于我不是一个完全的专家,请审查此代码,以您的具体应用之前,插入它。在我的系统中,它似乎工作得很好。我只是把它放在index.php和其他文件的头部区域。

我想你的意思是“另一个文件有5.3”?至于你的问题,对不起,我不确定。但是你看过apache2文档了吗?AFAIK$\u服务器[]全局中的许多可用内容由服务器本身决定。奇怪的是,手册没有记录它。。。5.3已经发布一段时间了,不是吗?谢谢,我已经修复了版本号!不,那没用。重写引擎在我的系统上启动,我的网页位于虚拟主机内。但尽管如此,它还是不起作用。这对我起作用了。我必须在站点的http配置文件中设置它。我的服务器设置了脚本URI,但php_sapi_name()报告apache2handler。(mod_php与Fedora 18上的PHP5.4和Apache2.4一起使用)这对我来说不是真的:我使用php作为mod_php,它定义了SCRIPT_URI。