从查询字符串和锚片段中拆分基本URL

时间:2013-12-25 21:48:17

标签: php url clean-urls

假设我有这个网址:

http://test.com/directory-test/?id=4746&other=454#comments

如何使用PHP检索该特定页面的URL,但是,没有所有变量和#s。例如:

http://test.com/directory-test/

我找到了这个函数,但是它在URL中包含了所有内容,所以它返回的URL看起来像上面的第一个例子,但是我想要一个看起来像第二个例子的URL。

function curPageURLALL() {
 $pageURL = 'http';
 if ($_SERVER["HTTPS"] == "on") {$pageURL .= "s";}
 $pageURL .= "://";
 if ($_SERVER["SERVER_PORT"] != "80") {
  $pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];
 } else {
  $pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
 }
 return $pageURL;
}

1 个答案:

答案 0 :(得分:0)

使用PHP_SELF而不是REQUEST_URI:)

function curPageURL() {
    $pageURL = 'http';
    if ($_SERVER["HTTPS"] == "on") {$pageURL .= "s";}
    $pageURL .= "://";
    if ($_SERVER["SERVER_PORT"] != "80") {
        $pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["PHP_SELF"];
    } else {
        $pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["PHP_SELF"];
    }
    return $pageURL;
}

Hymm,PHP_SELF也可能返回文件示例index.php所以也许这个

function curPageURL() {
    $pageURL = 'http';
    if (isset($_SERVER["HTTPS"]) && $_SERVER["HTTPS"] == "on") {$pageURL .= "s";}
    $pageURL .= "://";
    $pageURL .= $_SERVER["SERVER_NAME"];
    if ($_SERVER["SERVER_PORT"] != "80") {
        $pageURL .= ":".$_SERVER["SERVER_PORT"];
    }
    $pos = strpos($_SERVER["REQUEST_URI"],"?");
    $pageURL .= ($pos===false)?$_SERVER["REQUEST_URI"]:substr($_SERVER["REQUEST_URI"],0,$pos);
    return $pageURL;
}