IIS环境下正确获取$_SERVER['REQUEST_URI']的问题

众所周知,$_SERVER['REQUEST_URI']非常好用,但仅限于Apache环境下,那么要在IIS环境下获取这个参数该怎么办呢?
第一种办法是通过配置环境解决,这个方法我不敢确定,因为我也不知道是如何配置的,但我之前见过某些特殊配置过的IIS环境是可以获取到$_SERVER['REQUEST_URI']参数的,呵呵,只能等待高手去解决了。
第二种办法当然就是通过程序解决了,程序代码如下:
// Fix for IIS, which doesn't set REQUEST_URI
if (empty( $_SERVER['REQUEST_URI']))
{
    // IIS Mod-Rewrite
    if (isset($_SERVER['HTTP_X_ORIGINAL_URL']))
    {
        $_SERVER['REQUEST_URI'] = $_SERVER['HTTP_X_ORIGINAL_URL'];
    }
    // IIS Isapi_Rewrite
    elseif (isset($_SERVER['HTTP_X_REWRITE_URL']))
    {
        $_SERVER['REQUEST_URI'] = $_SERVER['HTTP_X_REWRITE_URL'];
    }
    else
    {
        // Use ORIG_PATH_INFO if there is no PATH_INFO
        if (!isset($_SERVER['PATH_INFO']) && isset($_SERVER['ORIG_PATH_INFO']))
        {
            $_SERVER['PATH_INFO'] = $_SERVER['ORIG_PATH_INFO'];
        }
 
        // Some IIS + PHP configurations puts the script-name in the path-info (No need to append it twice)
        if (isset($_SERVER['PATH_INFO']))
        {
            if ( $_SERVER['PATH_INFO'] == $_SERVER['SCRIPT_NAME'])
            {
                $_SERVER['REQUEST_URI'] = $_SERVER['PATH_INFO'];
			}
            else
            {
                $_SERVER['REQUEST_URI'] = $_SERVER['SCRIPT_NAME'] . $_SERVER['PATH_INFO'];
			}
        }
 
        // Append the query string if it exists and isn't null
        if (isset($_SERVER['QUERY_STRING']) && !empty($_SERVER['QUERY_STRING']))
        {
			$_SERVER['REQUEST_URI'] .= '?' . $_SERVER['QUERY_STRING'];
        }
    }
}
把这段代码放在获取$_SERVER['REQUEST_URI']的语句之前就OK了。

本文原创地址:https://www.ecshop.cx/article-296.html
版权所有 © 转载时必须以链接形式注明出处!

觉得本文对您有用,想收藏下来!方法很简单:请点击-〉
我们一直坚持白天工作、晚上熬夜更新资源,付出了巨大的精力和时间,其中的辛酸难以言述。

实时购买动态 ×

匿名网友 在 2019-07-07 购买了 ECSHOP一个账号同时只能一个人登录【实现前者踢下线功能】