PHP 获取当前页面完整 URL 的多种方法
在 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
注意事项
- HTTPS 支持:上述代码硬编码了
http://。在现代 Web 开发中,若站点启用 SSL,应检测$_SERVER['HTTPS']是否为 'on' 来决定协议头。 - JavaScript 对比:与前端的 JavaScript 不同,PHP 无法直接通过单一属性获取“顶级窗口”或“当前窗口”的地址,它只能反映当前服务端接收到的请求行信息。
- 安全性:直接从
$_SERVER获取的数据来源于客户端请求头,若用于输出到前端页面,请注意防范 XSS 攻击,建议对关键字段进行过滤或使用htmlspecialchars()转义。
简要总结
通过以上步骤,您可以灵活地组合 $_SERVER 中的各个字段来获取满足特定需求的 URL 字符串。无论是简单的域名+路径拼接,还是处理复杂的端口与参数情况,掌握这些基础变量都是 PHP 网络编程的关键技能。以上就是 PHP 获取当前页面完整 URL 的详细实现内容,更多关于 PHP 服务器变量用法与 Web 开发技巧的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









