用户
 找回密码
 入住 CI 中国社区
搜索
查看: 5630|回复: 2
收起左侧

[服务器] [分享心得]手动给IIS添加PATH_INFO变量

[复制链接]
发表于 2010-9-25 15:24:31 | 显示全部楼层 |阅读模式
以前:
/system/config/config.php里面
$config['uri_protocol']        = "AUTO";
意外情况:
http://WEBSITE.URL/?some=lskdj
出错了吧
需求:
不让它报错,不要它理问号后面的内容
解决:
搜索得到可以利用 修改$config['uri_protocol']为PATH_INFO解决
我修改后 果然解决,CI不理问号后面这些内容了
上传到虚拟主机还是不行,一看是IIS 打印$_SERVER 果然跟apache的不一样
琢磨着手动给IIS加这么个参数,于是乎
在/index.php中 适当位置 添加如此代码:
无非是判断是IIS服务器就 从QUERY_STRING变量去掉?以及以后的内容作为PATH_INFO
PHP复制代码
/*
| hand-edit $_SERVER['PATH_INFO'] for IIS
*/

if(isset($_SERVER['SERVER_SOFTWARE']) AND preg_match('/IIS/',$_SERVER['SERVER_SOFTWARE'])){
    $_SERVER['PATH_INFO']  =  preg_replace('/\?.*/','',$_SERVER['QUERY_STRING']);
}
复制代码

PS:适当位置是什么位置?-》所有的 require_once 上面
上传后倒是可以了,但是我对CGI规范不熟悉,写的时候看到$_SERVER['QUERY_STRING'] 这个变量合适就拿过来用了,也不知道'PATH_INFO'从这变量演化而来可不可靠,
发出来 请众朋友说说看。
 楼主| 发表于 2010-9-25 16:35:39 | 显示全部楼层
我又试了几下发现使用QUERY_STRING还不是很正确。
PHP复制代码
if(isset($_SERVER['SERVER_SOFTWARE']) AND preg_match('/IIS/',$_SERVER['SERVER_SOFTWARE'])){
            $_SERVER['PATH_INFO']  =  preg_replace('/\?.*/','',$_SERVER['HTTP_X_REWRITE_URL']);
            $_SERVER['PATH_INFO']  =  $_SERVER['PATH_INFO'] == '' ? '/' : $_SERVER['PATH_INFO'];
        }
复制代码

改成了这样
发表于 2010-9-28 06:33:50 | 显示全部楼层
我有买过一些IIS的虚拟主机,服务器都带有PATH_INFO,现在好多商家都会去开这个。

本版积分规则