PHP获取当前页面的URL
如果你是想在WordPress中获取当前页面的的URL,可以参考:WordPress中获取当前页面URL
使用PHP编写程序的时候,我们常常想要获取当前页面的URL。下面提供一个用于获取当前页面URL的函数以及使用方法:
示例一:
<?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;
}
?>
定义该函数之后就可以直接调用了:
<?php
echo curPageURL();
?>
上面的函数可以获取当前页面完整的URL,即你在浏览器地址栏看到的内容。但是,有时候我们不想要URL中的参数( ? 号后面的内容),如:https://www.ludou.org/hello.html?u=123,只想获取https://www.ludou.org/hello.html,你可以将以上函数按示例二修改。
示例二:
<?php
// 说明:获取无参数URL
function curPageURL()
{
$pageURL = 'http';
if ($_SERVER["HTTPS"] == "on")
{
$pageURL .= "s";
}
$pageURL .= "://";
$this_page = $_SERVER["REQUEST_URI"];
// 只取 ? 前面的内容
if (strpos($this_page, "?") !== false)
{
$this_pages = explode("?", $this_page);
$this_page = reset($this_pages);
}
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中的参数),
示例三:
<?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']
值,可以使用以下方案:
<?php
// 说明:获取 _SERVER['REQUEST_URI'] 值的通用解决方案
// 来源:drupal-5.1 bootstrap.inc
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
-- 完 --
本文采用 「CC BY-NC-SA 4.0」创作共享协议,转载请标注以下信息:
原文出处:露兜即刻 https://www.ludou.org/get_current_page_url.html
来这学习~
希望博主能更具体的讲解一下:“URL使用rewrite规则的时候,$_SERVER['PHP_SELF']和$_SERVER["REQUEST_URL"]可能不会返回你想要的东西”!如何获取重写之后的url地址
@晴天打雨伞 用:$_SERVER['REQUEST_URI']
@Ludou 这个是只在apache服务器支持吧!?要是不是apache了
@晴天打雨伞 $_SERVER['REQUEST_URI']支持所有服务器!
我手里没有这么多服务器,你可以自己写代码测试,谢谢!
@晴天打雨伞 见文:
http://t.cn/8FcfnHE
@Ludou 很可惜不行,博主可以试试!我用的是本地的wp 重写url下情况下,返回的结果是重写之后的 uri 。(服务器:apache)
@晴天打雨伞 "如何获取重写之后的url地址",貌似你想要的是重写之后的地址?你是想要URL呢,还是URI?不知道你有么有试过本文中的代码?
@Ludou 你上面的三个函数,都测试了一遍。
第一个: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'];
具体请上网搜索!
来向高手学习过来了。
最后提醒一点,$_SERVER["REQUEST_URI"] 只有 apache 才支持,想要一个获取 $_SERVER['REQUEST_URI'] 值的通用解决方案,可以使用以下方案:
有没有更加简洁的办法呢?
@5D影院设备 暂时没发现
好久没来了!!来了!学习了最近在学习PHP 和Mysql
有没有通用一点的获取网页标题的方法啊。就是不管插到什么函数中都可以用。刚开始学php,想修改代码,但不会啊。我现在获取的网页标题都是%E9%B9%85%E9%B9%85%E9这样的
@xiaomingtt 如果是在wordpress的文章或页面中,可以使用以下代码:
<?php single_post_title(); ?>
@Ludou 不行啊,
$pName = single_post_title();
我在函数中这样用,没效果啊,$pName还是空的
@xiaomingtt 如果要将值传递给变量,请使用以下代码:
$pName = single_post_title("", FALSE);
谢谢!搜索资料的时候总是能找到露兜的博客。
恩,如果地址是 http://example.com 的话,第三种方法只会输出 “/”,如果是 http://example.com/example,那么只会输出 “example”。请问怎么输出完整地址呢?
请问大大!
使用"示例二"的代码…
不想网址后方带有index.php/index.html
如: https://www.ludou.org/
@nome 可能跟你的rewrite规则有关
@Ludou htaccess 没有做静态化的规则..
主页
http://www.domain.com/index.html
二级目录
http://www.domain.com/directory/index.php
获取的链接,后面都带有index.php/index.html尾巴… 0.0
请问这个是否没有得解决的?
@nome echo trim(curPageURL(), ‘index.php/index.html’);
@Ludou 前后少了字符…
算了! 放弃这个了…
谢谢大大的帮忙..
示例二 什么会有Strict Standards</b>: Only variables should be passed by reference in这个报错 $this_page = reset(explode("?", $this_page));
@haguo 代码已更新
@露兜 谢谢露露回复,其实你的方法我昨天中午试过,貌似修复好,但到晚是再试试,不知为啥报错了,再点击排序几次,浏览器也挂了,最后再上你站,没想到你站貌似抽了两个钟。我等到两点后台又折腾,我真不知有多少人真安照教程来学的,样板主题错了这么多年都没人注意到,嘿嘿
@haguo 本站未使用文章中的代码,访问不了可能是线路的问题。
具体的报错跟PHP的版本和服务器的配置也有关系。
@露兜又来打扰你了,嘿嘿!我意思是用你的教程提供下载的Aurelius主题的代码就有错,或者你试试用提供下载Aurelius这个主题,打开归档页,点击排序功能留意浏览器的反应,我点到第四次浏览器挂了。还有一个问题,貌似你的主题有重复发信的问题,会不会重复开启了有人回复时邮件通知我的功能,或有代码重复了!同一时间我收到四封回复,你也太热情了,想不来点点广告也不好意思哦,嘿嘿!
@haguo 谢谢你的提醒,我再测试一下。
如何排除某些网址不被获取呢?