madwolfs 发表于 2010-9-25 15:24:31

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

以前:
/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
/*
| 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'从这变量演化而来可不可靠,
发出来 请众朋友说说看。

madwolfs 发表于 2010-9-25 16:35:39

我又试了几下发现使用QUERY_STRING还不是很正确。
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'];
      }
改成了这样

sonic 发表于 2010-9-28 06:33:50

我有买过一些IIS的虚拟主机,服务器都带有PATH_INFO,现在好多商家都会去开这个。
页: [1]
查看完整版本: [分享心得]手动给IIS添加PATH_INFO变量