PHP获取当前页面的URL
使用PHP编写程序的时候,我们常常想要获取当前页面的URL。下面提供一个用于获取当前页面URL的函数以及使用方法:
示例一:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | <?php // 说明:获取完整URL 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; } ?> |
定义该函数之后就可以直接调用了:
1 2 3 | <?php echo curPageURL(); ?> |
上面的函数可以获取当前页面完整的URL,即你在浏览器地址栏看到的内容。但是,有时候我们不想要URL中的参数( ? 号后面的内容),如:http://www.ludou.org/hello.html?u=123,只想获取http://www.ludou.org/hello.html,你可以将以上函数做以下更改:
示例二:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | <?php // 说明:获取无参数URL function curPageURL() { $pageURL = 'http'; if ($_SERVER["HTTPS"] == "on") { $pageURL .= "s"; } $pageURL .= "://"; $this_page = $_SERVER["REQUEST_URI"]; // 只取 ? 前面的内容 if (strpos($this_page, "?") !== false) $this_page = reset(explode("?", $this_page)); if ($_SERVER["SERVER_PORT"] != "80") { $pageURL .= $_SERVER["SERVER_NAME"] . ":" . $_SERVER["SERVER_PORT"] . $this_page; } else { $pageURL .= $_SERVER["SERVER_NAME"] . $this_page; } return $pageURL; } ?> |
当然也可以采用 $_SERVER['PHP_SELF'] (该变量不返回URL中的参数),
示例三:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | <?php // 说明:获取无参数URL 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; } ?> |
另外,$_SERVER['REQUEST_URI'] 和 $_SERVER['REQUEST_URL'] 是有稍微区别的:
$_SERVER["REQUEST_URI"] 返回完整的路径 ( /directory/file.ext?query=string )
$_SERVER['REQUEST_URL'] 只返回文件路径,不包括参数,( /directory/file.ext ),和$_SERVER['PHP_SELF']差不多,只不过在有些服务器上$_SERVER['REQUEST_URL']不可用!
注意:URL使用rewrite规则的时候,$_SERVER['PHP_SELF']和$_SERVER["REQUEST_URL"]可能不会返回你想要的东西
最后提醒一点,$_SERVER["REQUEST_URI"] 只有 apache 才支持,想要一个获取 $_SERVER['REQUEST_URI'] 值的通用解决方案,可以使用以下方案:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | <?php // 说明:获取 _SERVER['REQUEST_URI'] 值的通用解决方案 // 来源:drupal-5.1 bootstrap.inc // 整理:http://www.codebit.cn/pub/html/php_mysql/tip/other/request_uri function request_uri() { if (isset($_SERVER['REQUEST_URI'])) { $uri = $_SERVER['REQUEST_URI']; } else { if (isset($_SERVER['argv'])) { $uri = $_SERVER['PHP_SELF'] .'?'. $_SERVER['argv'][0]; } else { $uri = $_SERVER['PHP_SELF'] .'?'. $_SERVER['QUERY_STRING']; } } return $uri; } ?> |
参考资料:
- http://php.net/manual/en/reserved.variables.server.php
- http://www.webcheatsheet.com/php/get_current_page_url.php
本文版权归露兜博客所有,转载引用请完整注明以下信息:
本文作者:Ludou
本文标题:PHP获取当前页面的URL
本文地址:http://www.ludou.org/get_current_page_url.html
来这学习~
希望博主能更具体的讲解一下:“URL使用rewrite规则的时候,$_SERVER['PHP_SELF']和$_SERVER["REQUEST_URL"]可能不会返回你想要的东西”!如何获取重写之后的url地址
用:$_SERVER['REQUEST_URI']
这个是只在apache服务器支持吧!?要是不是apache了
$_SERVER['REQUEST_URI']支持所有服务器!
我手里没有这么多服务器,你可以自己写代码测试,谢谢!
见文:
http://www.codebit.cn/php/request-uri.html
很可惜不行,博主可以试试!我用的是本地的wp 重写url下情况下,返回的结果是重写之后的 uri 。(服务器:apache)
"如何获取重写之后的url地址",貌似你想要的是重写之后的地址?你是想要URL呢,还是URI?不知道你有么有试过本文中的代码?
你上面的三个函数,都测试了一遍。
第一个:http://localhost/2011/04/hello-world/
第二个:http://localhost/
第三个:/2011/04/hello-world/
都不是:http://localhost/?p=1 或 index.php?p=1
想要的:index.php?p=1
原来是重写之前的网址!
试试:$_SERVER['SCRIPT_URI']
不行我也不知道了!
观望。。。
如果想取得上一步的地址的话,什么写捏?
echo $_SERVER['HTTP_REFERER'];
具体请上网搜索!