PHP获取当前页面的URL

日期: 标签:phpWeb 35 条留言
如需帮忙改代码,或者WordPress二次开发、PHP网站建设等需求,可联系我购买付费服务:  点此联系我

如果你是想在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;
}
?>

参考资料

-- 完 --

本文采用 「CC BY-NC-SA 4.0」创作共享协议,转载请标注以下信息:
原文出处:露兜博客 https://www.ludou.org/get_current_page_url.html
露兜
kaapass@outlook.com  QQ 825533758

业余编程爱好者,主业是淘宝店主,卖些工艺品,感兴趣可以到我的淘宝店看看(旺旺不提供技术咨询):西西弗sisyphe

35 条留言

点此留言
  1. key4ever

    来这学习~

  2. 晴天打雨伞

    希望博主能更具体的讲解一下:“URL使用rewrite规则的时候,$_SERVER['PHP_SELF']和$_SERVER["REQUEST_URL"]可能不会返回你想要的东西”!如何获取重写之后的url地址

  3. Ludou

    @晴天打雨伞 用:$_SERVER['REQUEST_URI']

  4. 晴天打雨伞

    @Ludou 这个是只在apache服务器支持吧!?要是不是apache了

  5. Ludou

    @晴天打雨伞 $_SERVER['REQUEST_URI']支持所有服务器!
    我手里没有这么多服务器,你可以自己写代码测试,谢谢!

  6. Ludou

    @晴天打雨伞 见文:
    http://t.cn/8FcfnHE

  7. 晴天打雨伞

    @Ludou 很可惜不行,博主可以试试!我用的是本地的wp 重写url下情况下,返回的结果是重写之后的 uri 。(服务器:apache)

  8. Ludou

    @晴天打雨伞 "如何获取重写之后的url地址",貌似你想要的是重写之后的地址?你是想要URL呢,还是URI?不知道你有么有试过本文中的代码?

  9. 晴天打雨伞

    @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

  10. Ludou

    @晴天打雨伞 原来是重写之前的网址!

    试试:$_SERVER['SCRIPT_URI']
    不行我也不知道了!

  11. heyj

    @晴天打雨伞 观望。。。

  12. 健康

    如果想取得上一步的地址的话,什么写捏?

  13. Ludou

    @健康 echo $_SERVER['HTTP_REFERER'];

    具体请上网搜索!

  14. 海纳百川

    来向高手学习过来了。

  15. 5D影院设备

    最后提醒一点,$_SERVER["REQUEST_URI"] 只有 apache 才支持,想要一个获取 $_SERVER['REQUEST_URI'] 值的通用解决方案,可以使用以下方案:

    有没有更加简洁的办法呢?

  16. Ludou

    @5D影院设备 暂时没发现

  17. 自由屋博客

    好久没来了!!来了!学习了最近在学习PHP 和Mysql

  18. xiaomingtt

    有没有通用一点的获取网页标题的方法啊。就是不管插到什么函数中都可以用。刚开始学php,想修改代码,但不会啊。我现在获取的网页标题都是%E9%B9%85%E9%B9%85%E9这样的

  19. Ludou

    @xiaomingtt 如果是在wordpress的文章或页面中,可以使用以下代码:
    <?php single_post_title(); ?>

  20. xiaomingtt

    @Ludou 不行啊,
    $pName = single_post_title();
    我在函数中这样用,没效果啊,$pName还是空的

  21. Ludou

    @xiaomingtt 如果要将值传递给变量,请使用以下代码:
    $pName = single_post_title("", FALSE);

  22. scarangel

    谢谢!搜索资料的时候总是能找到露兜的博客。

  23. 大头蛋

    恩,如果地址是 http://example.com 的话,第三种方法只会输出 “/”,如果是 http://example.com/example,那么只会输出 “example”。请问怎么输出完整地址呢?

  24. nome

    请问大大!

    使用"示例二"的代码…

    不想网址后方带有index.php/index.html

    如: https://www.ludou.org/

  25. Ludou

    @nome 可能跟你的rewrite规则有关

  26. nome

    @Ludou htaccess 没有做静态化的规则..

    主页
    http://www.domain.com/index.html

    二级目录
    http://www.domain.com/directory/index.php

    获取的链接,后面都带有index.php/index.html尾巴… 0.0

    请问这个是否没有得解决的?

  27. Ludou

    @nome echo trim(curPageURL(), ‘index.php/index.html’);

  28. nome

    @Ludou 前后少了字符…

    算了! 放弃这个了…

    谢谢大大的帮忙..

  29. haguo

    示例二 什么会有Strict Standards</b>: Only variables should be passed by reference in这个报错 $this_page = reset(explode("?", $this_page));

  30. 露兜

    @haguo 代码已更新

  31. haguo

    @露兜 谢谢露露回复,其实你的方法我昨天中午试过,貌似修复好,但到晚是再试试,不知为啥报错了,再点击排序几次,浏览器也挂了,最后再上你站,没想到你站貌似抽了两个钟。我等到两点后台又折腾,我真不知有多少人真安照教程来学的,样板主题错了这么多年都没人注意到,嘿嘿

  32. 露兜

    @haguo 本站未使用文章中的代码,访问不了可能是线路的问题。
    具体的报错跟PHP的版本和服务器的配置也有关系。

  33. haguo

    @露兜又来打扰你了,嘿嘿!我意思是用你的教程提供下载的Aurelius主题的代码就有错,或者你试试用提供下载Aurelius这个主题,打开归档页,点击排序功能留意浏览器的反应,我点到第四次浏览器挂了。还有一个问题,貌似你的主题有重复发信的问题,会不会重复开启了有人回复时邮件通知我的功能,或有代码重复了!同一时间我收到四封回复,你也太热情了,想不来点点广告也不好意思哦,嘿嘿!

  34. 露兜

    @haguo 谢谢你的提醒,我再测试一下。

  35. 拉萨虫草

    如何排除某些网址不被获取呢?

发表留言