PHP 获取当前页面完整 URL 的多种方法

陆遥
陆遥
发布时间:2026-10-14 | 6人浏览过
原创

在 PHP 开发中,获取当前页面的完整 URL 是处理重定向、链接生成或日志记录的常见需求。由于协议、域名、路径和查询参数可能分开存储,我们需要组合多个 $_SERVER 变量来还原完整地址。

核心原理与准备条件

PHP 运行在服务器端,浏览器发送的 HTTP 请求信息存储在 $_SERVER 超全局数组中。要获取完整的 URL,通常需要确认以下部分:

  • 协议头:通常固定为 http:// 或 https://,实际项目中建议根据 SSL 证书情况动态判断。
  • 域名或主机:通过 HTTP_HOST 获取。
  • 路径与参数:通过 REQUEST_URI 直接获取包含查询字符串的完整 URI,或者分别使用 PHP_SELF 和 QUERY_STRING 进行拼接。

常用实现方案

第1步:获取不包含端口的基础完整 URL

这是最通用的写法,适用于大多数不需要显式指定端口(如 80 或 443)的场景。它将域名和请求 URI 直接拼接。

// 测试网址示例: http://localhost/blog/testurl.php?id=5
// 获取域名或主机地址
$host = $_SERVER['HTTP_HOST'];
echo $host . "<br>"; // 输出: localhost

// 获取网页地址(文件路径)
$path = $_SERVER['PHP_SELF'];
echo $path . "<br>"; // 输出: /blog/testurl.php

// 获取网址参数
$params = $_SERVER["QUERY_STRING"];
echo $params . "<br>"; // 输出: id=5

// 获取完整的URL
echo 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; 
// 输出: http://localhost/blog/testurl.php?id=5

// 另一种等效拼接方式
echo 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'] . '?' . $_SERVER['QUERY_STRING']; 
// 输出: http://localhost/blog/testurl.php?id=5

第2步:获取包含端口号的完整 URL

当项目运行在非标准端口(如本地开发环境的自定义端口)时,HTTP_HOST 虽然已包含端口,但有时为了明确标识,也可以直接使用 SERVER_NAME 和 SERVER_PORT 进行拼接。

// 包含端口号的完整URL
echo 'http://' . $_SERVER['SERVER_NAME'] . ':' . $_SERVER["SERVER_PORT"] . $_SERVER["REQUEST_URI"];
// 输出: http://localhost:80/blog/testurl.php?id=5

第3步:只获取目录路径(去除文件名和参数)

如果需要获取当前脚本所在的目录结构,可以使用 dirname() 函数处理拼接后的 URL 字符串。

$url = 'http://' . $_SERVER['SERVER_NAME'] . $_SERVER["REQUEST_URI"];
echo dirname($url);
// 输出: http://localhost/blog

注意事项

  1. HTTPS 支持:上述代码硬编码了 http://。在现代 Web 开发中,若站点启用 SSL,应检测 $_SERVER['HTTPS'] 是否为 'on' 来决定协议头。
  2. JavaScript 对比:与前端的 JavaScript 不同,PHP 无法直接通过单一属性获取“顶级窗口”或“当前窗口”的地址,它只能反映当前服务端接收到的请求行信息。
  3. 安全性:直接从 $_SERVER 获取的数据来源于客户端请求头,若用于输出到前端页面,请注意防范 XSS 攻击,建议对关键字段进行过滤或使用 htmlspecialchars() 转义。

简要总结

通过以上步骤,您可以灵活地组合 $_SERVER 中的各个字段来获取满足特定需求的 URL 字符串。无论是简单的域名+路径拼接,还是处理复杂的端口与参数情况,掌握这些基础变量都是 PHP 网络编程的关键技能。以上就是 PHP 获取当前页面完整 URL 的详细实现内容,更多关于 PHP 服务器变量用法与 Web 开发技巧的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表