如何在PHP中获取当前页面的URL

196
在PHP中,我该如何获取当前页面的URL?最好只获取在http://domain.example之后的部分。

请查看此答案:https://dev59.com/imw15IYBdhLWcg3wMY6L#8891890 - Timo Huovinen
14
尽管这个问题是提前两年提出的,但我觉得很有趣,它被标记为重复问题的一个副本。 - cameronjonesweb
6
@cameronjonesweb提出的另一个问题完全不同,其范围是获取完整的URL,而不是本问题仅获取当前页面。请问您需要什么其他的翻译吗? - person27
$url = !empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off')?"https://":"http://".$_SERVER['HTTP_HOST'];简单的方法 :) - Pirooz Jenabi
5个回答

341
$_SERVER['REQUEST_URI']

想要了解$_SERVER数组中可用的信息的更多细节,请参阅PHP手册页面

如果您还需要查询字符串(URL中?后面的部分),该部分存储在此变量中:

$_SERVER['QUERY_STRING']

7
您也可以使用 $_SERVER['PHP_SELF']。 - Alix Axel
13
如果页面通过mod_rewrite重定向,PHP_SELF和REQUEST_URI将具有不同的值-前者具有实际脚本的路径,后者具有最初请求的路径。 - Amber
1
在我的 Apache 2.2.4 和 PHP 5.3 中,REQUEST_URI 已经包含了问号后面的内容。 - Kzqai
2
$_SERVER['REQUEST_URI'] 包含所有查询字符串,为什么我要使用 $_SERVER['QUERY_STRING'] - Shafizadeh

117

如果您只想得到网址http://domain.example之后的部分,请尝试以下方法:

<?php echo $_SERVER['REQUEST_URI']; ?>

如果当前URL是http://domain.example/some-slug/some-id,echo仅返回/some-slug/some-id
如果您想要完整的URL,请尝试以下内容:
<?php echo 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; ?>

19
你是否应该检查HTTPS://是否已启用?我找到了一个检查的函数:function isSSL() { return (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') || $_SERVER['SERVER_PORT'] == 443; } - Dendromaniac
<?php echo $_SERVER['SERVER_NAME']; ?> 如果你只想获取域名。 - Erik Thiart
@ErikThiart,我尝试了 <?php echo $_SERVER['SERVER_NAME']; ?>,它显示的是 example.com,但我需要的是 http://www.example.com。这可行吗? - user9437856
用REQUEST_SCHEME替换http怎么样: $_SERVER['REQUEST_SCHEME']. "://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] - aerobrain
替换http为REQUEST_SCHEME如何?: $_SERVER['REQUEST_SCHEME']. "://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] - undefined

29
 $uri = $_SERVER['REQUEST_URI'];

这将为您提供所请求的目录和文件名。如果您使用mod_rewrite,这非常有用,因为它告诉您用户正在查看的页面。

如果您需要实际的文件名,您可以尝试使用$_SERVER['PHP_SELF']、魔术常量__FILE__$_SERVER['SCRIPT_FILENAME']。后两者给出了完整的路径(从服务器根目录开始),而不仅仅是您网站的根目录。它们对于包含等操作非常有用。

$_SERVER['PHP_SELF']会给出相对于网站根目录的文件名。

 $relative_path = $_SERVER['PHP_SELF'];
 $complete_path = __FILE__;
 $complete_path = $_SERVER['SCRIPT_FILENAME'];

14

其他答案是正确的。但是,需要注意的是:如果您想获取URI中?之后的内容,则应使用$_GET[]数组。


-2
你可以使用$_SERVER['HTTP_REFERER']来获取完整的URL,例如:
假设你想得到网站名称为www.example.com的URL,则$_SERVER['HTTP_REFERER']将给你返回https://www.example.com

为什么我的 $_SERVER 变量不包含这个项目? - Frankie Drake
1
$_SERVER['HTTP_REFERER'] 正如其名,可以获取发送用户到当前页面的页面的 URL,也就是所谓的“来源”。 - Dendromaniac
11
点赞此回答的人可能会在调试代码时遇到麻烦。HTTP_REFERER不是当前页面,而是用户在当前页面之前访问的页面。 - AliBZ
1
此外,这并不总是可靠的。它由用户代理设置,而不是服务器 - 因此,正如PHP手册所说(http://php.net/manual/en/reserved.variables.server.php),"简而言之,它不能真正被信任。" - kittykittybangbang

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接