在apache或nginx的服务器上使用自带重写功能后都能正确获取的重写后的新地址,可iis6是不一样,没有自带重写功能,安装了ISAPI_Rewrite重写组件后,如果使用了重写,IIS不会将在地址栏中的URL记为REQUEST_URI,而是重写后的URI
如下面的URL
RewriteRule (.*)$ /index.php?s=$1 [I]
本来是执行Pro模块的show方法,为1,在Pro模块中获取REQUEST_URI,值应为/pro/show/id/1.htm
但在IIS中是 /index.php?s=/pro/show/id/1.htm
最后找到了段代码解决:
//IIS REQUEST_URI compatibility 是否使用了 ISAPI_Rewrite
if (isset($_SERVER[‘REQUEST_URI’])) {
//ISAPI_Rewrite 3.x
if (isset($_SERVER[‘HTTP_X_REWRITE_URL’])){
$_SERVER[‘REQUEST_URI’] = $_SERVER[‘HTTP_X_REWRITE_URL’];
}
//ISAPI_Rewrite 2.x w/ HTTPD.INI configuration 其中2.0就调用这个成功获取重写后的新地址
elseif (isset($_SERVER[‘HTTP_REQUEST_URI’])){
$_SERVER[‘REQUEST_URI’] = $_SERVER[‘HTTP_REQUEST_URI’];
}
//ISAPI_Rewrite isn’t installed or not configured
else {
$_SERVER[‘HTTP_REQUEST_URI’]=isset($_SERVER[‘SCRIPT_NAME’])?$_SERVER[‘SCRIPT_NAME’]:$_SERVER[‘PHP_SELF’];
if (isset($_SERVER[‘QUERY_STRING’])) $_SERVER[‘HTTP_REQUEST_URI’] .= ‘?’.$_SERVER[‘QUERY_STRING’];
$_SERVER[‘REQUEST_URI’]=$_SERVER[‘HTTP_REQUEST_URI’];
}
}
把以上代码加到你要获取REQUEST_URI的前面执行,根据实际情况修改!
希望能给你带来帮助,转载注明源地址!谢谢