我使用PHP构建当前页面的URL。的形式

www.example.com/myurl.html?unwantedthngs

是要求。我想把?和它后面的所有内容(querystring),这样得到的URL就变成:

www.example.com/myurl.html

我现在的代码是这样的:

<?php
function curPageURL() {
    $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;
}
?>

当前回答

你可以像这样使用parse_url内置函数:

$baseUrl = $_SERVER['SERVER_NAME'] . parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);

其他回答

你可以试试:

<?php
$this_page = basename($_SERVER['REQUEST_URI']);
if (strpos($this_page, "?") !== false) $this_page = reset(explode("?", $this_page));
?>
$val = substr( $url, 0, strrpos( $url, "?"));

如果你想获取请求路径(更多信息):

echo parse_url($_SERVER["REQUEST_URI"])['path']

如果你想删除查询和(也可能是片段):

function strposa($haystack, $needles=array(), $offset=0) {
        $chr = array();
        foreach($needles as $needle) {
                $res = strpos($haystack, $needle, $offset);
                if ($res !== false) $chr[$needle] = $res;
        }
        if(empty($chr)) return false;
        return min($chr);
}
$i = strposa($_SERVER["REQUEST_URI"], ['#', '?']);
echo strrpos($_SERVER["REQUEST_URI"], 0, $i);

也可以使用以下按照PHP手册注释

$_SERVER['REDIRECT_URL']

请注意,这只适用于特定的PHP环境,并从该页面下面的评论了解更多信息;

目的:当前PHP文件的URL路径名,path-info为N/A 和不包括URL查询字符串。包括前导斜杠。 注意:这是在URL重写之前(即它是按照原始的 调用的URL)。 注意:不是在所有PHP环境中都设置,而且肯定只在带有 URL重写。 在web模式下工作:是的 CLI模式下:不支持

你至少需要PHP版本5.4来实现这个解决方案,而不是在一行中爆炸成一个变量并连接到下一行,但一个简单的一行将是:

$_SERVER["HTTP_HOST"].explode('?', $_SERVER["REQUEST_URI"], 2)[0];

服务器变量:http://php.net/manual/en/reserved.variables.server.php 数组解引用:https://wiki.php.net/rfc/functionarraydereferencing