0

无论如何在 IIS 上的 PHP 中获取当前完整重写的 URL。

例如,我有一个像这样的 URL:

http://www.domain.com/searchresults.php?section=99&page=1&model=section-name

重写为: http: //www.domain.com/section99/page1/section-name

我已经能够使用以下方法拼凑原始 URL:

function selfURL(){
    if(!isset($_SERVER['REQUEST_URI'])){
        $serverrequri = $_SERVER['PHP_SELF'];
    }else{
        $serverrequri =    $_SERVER['REQUEST_URI'];
    }
    $s = empty($_SERVER["HTTPS"]) ? '' : ($_SERVER["HTTPS"] == "on") ? "s" : "";
    $protocol = "http";
    $port = ($_SERVER["SERVER_PORT"] == "80") ? "" : (":".$_SERVER["SERVER_PORT"]);
    return $protocol."://".$_SERVER['SERVER_NAME'].$port.$serverrequri.$_SERVER['QUERY_STRING'];   
}
print(selfURL());

无论如何,我是否可以轻松地选择重写的 URL,以避免必须根据当前页面类型从多种不同格式和变量中计算出友好 URL 的开销?

4

2 回答 2

0

我建议您在文件中使用 Apache的mod_rewrite 规则.htaccess,然后将它们导入 IIS 7。这将生成 web.config 文件。

当然,如果你知道如何直接在 上工作web.config,那就去吧!

于 2013-08-20T09:11:52.563 回答
0

我可以用:

HTTP_X_ORIGINAL_URL

function selfURL(){
    if(!isset($_SERVER['REQUEST_URI'])){
        $serverrequri = $_SERVER['PHP_SELF'];
    }else{
        $serverrequri =    $_SERVER['REQUEST_URI'];
    }
    $protocol = empty($_SERVER["HTTPS"]) ? 'http' : ($_SERVER["HTTPS"] == "on") ? "https" : "http";
    $port = ($_SERVER["SERVER_PORT"] == "80") ? "" : (":".$_SERVER["SERVER_PORT"]);
    return $protocol."://".$_SERVER['SERVER_NAME'].$port.$_SERVER["HTTP_X_ORIGINAL_URL"];
}
print(selfURL());
于 2013-08-20T09:13:25.100 回答