我已经尝试了很多组合来获得正确的页面路径,比如javascript代码
escape(window.location.href)
我试过这个:
$url = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]$_SERVER[QUERY_STRING]";
但它返回的内容类似于:
http://www.mydomain.com/node/4158?asdf=1asdf=1
当实际页面为:时
http://www.mydomain.com/node/4158?asdf=1
如果我有这个URL:例如http://www.mydomain.com/node/4158#comments
,结果是:
http://www.mydomain.com/node/4158
即没有"#comments"
片段标识符#
完全由客户端处理。浏览器不会将其发送到服务器,因此PHP无法访问它。
了解它是什么的唯一方法是在发出包含完整URI的HTTP请求的页面中包含JavaScript。
$_SERVER['QUERY_STRING']
是$_SERVER['REQUEST_URI']
的子字符串-您只需要后者。但是,与其自己构建URL,不如简单地使用$_SERVER['SCRIPT_URI']
。
此外,由于您的应用程序是服务器端的,并且片段标识符(#
中的所有内容)不会包含在HTTP请求中,因此无法在php代码中访问它。
$location = (@$_SERVER["HTTPS"] == "on") ? "https://" : "http://";
if ($_SERVER["SERVER_PORT"] != "80") {
$location .= $_SERVER["SERVER_NAME"] . ":" . $_SERVER["SERVER_PORT"] . $_SERVER["REQUEST_URI"];
} else {
$location .= $_SERVER["SERVER_NAME"] . $_SERVER["REQUEST_URI"];
}
echo $location;
尝试
$url = $_SERVER['REQUEST_URI'];
很多人说这里的片段是客户端的,但根据文档,如果存在,parse_url将返回片段(请参阅链接中的第一个示例)。