PHP 如何获取当前 URL

在开发网站或搭建小程序后台时,我们经常需要获取当前页面的网址信息——比如统计用户从哪个页面跳转过来、根据网址参数展示不同内容,或是生成带参数的分享链接。对于用PHP做开发的人来说,获取当前URL是最基础的常用操作,但很多新手会分不清不同场景下该用什么方法,今天就用生活化的例子讲清楚。

先搞懂“当前URL”到底指什么

我们平时说的URL,就是浏览器地址栏里的那串字符,比如https://www.example.com/news?id=123&from=share,它包含了协议(https://)、域名(www.example.com)、路径(/news)和参数(id=123&from=share)这几部分。就像你寄快递时,要写清楚“用什么快递(协议)、寄到哪个小区(域名)、哪栋楼哪层(路径)、门牌号(参数)”,PHP获取URL的本质,就是把这些信息拆分出来。

PHP 如何获取当前 URL

最常用的3种获取方法,对应不同需求

PHP里内置了专门获取服务器环境信息的“超全局变量”,就像你手机的“系统剪贴板”,随时能调用当前页面的所有环境数据,不同变量对应不同的URL部分,正好对应我们平时的需求。

直接获取完整URL:适合分享链接、统计入口

如果需要把整个网址存起来或者分享,用$_SERVER['HTTP_HOST']加$_SERVER['REQUEST_URI']拼接就可以。举个例子:用户在你的网站的“商品详情页”(网址是https://www.你的网站.com/goods?pid=456),你想把这个页面做成分享卡片,就需要完整URL。

具体写法是:

`php

$current_url = 'https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];

`

这里的HTTP_HOST就是域名部分,REQUEST_URI是路径加参数,两者一加就是完整地址。要注意,这个方法拿的是用户访问的真实地址,哪怕用户把页面放在子目录里也没问题,比如http://你的域名.com/blog/post,也能正确拼接。

只取域名/路径:适合判断页面类型

如果只需要域名,用来区分是“移动端域名”还是“PC端域名”,或者只取路径来判断是首页、列表页,就用HTTP_HOST和REQUEST_URI单独拿。比如你做了一个“文章分类页”,想根据路径/article来显示不同的侧边栏,就可以用:

`php

$current_path = $_SERVER['REQUEST_URI'];

// 如果路径是/article,就显示文章分类

if (strpos($current_path, '/article') !== false) {

// 加载文章侧边栏代码

}

`

strpos就是找字符串里有没有指定的内容,就像在一堆水果里找有没有苹果,能快速判断当前页面的类型。

更稳妥的写法:避免本地测试出错

有时候新手在本地用WAMP/XAMPP测试时,会发现HTTP_HOST偶尔取不对,这是因为本地测试时用的是localhost,这时候可以加个判断,兼容本地和线上环境:

`php

$protocol = isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? 'https' : 'http';

$current_url = $protocol . '://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];

`

这里的$protocol就是判断当前用的是HTTP还是HTTPS,就像你寄快递时,普通件用普通快递,贵重件用特快,自动匹配协议,这样本地和线上环境都能正确获取URL,不会出错。

常见的坑要避开

很多新手容易踩两个小坑:一是用PHP_SELF代替REQUEST_URI,PHP_SELF只能拿到路径,拿不到后面的参数,就像你寄快递只写了小区,没写门牌号,会送错;二是直接用$_SERVER['SERVER_NAME'],这个是服务器的主机名,和用户访问的域名可能不一样(比如用户用了CDN的域名),拿出来的地址会不对。

掌握这几个方法,就能轻松应对大部分获取当前URL的需求,不管是做统计、跳转还是生成分享内容,都能得心应手。

上一篇 Swift语言核心特性及日常开发中的实用场景科普