PHP获取当前页面完整URL地址$_SERVER PHP
前言
生成当前页面链接、做回调地址、防重定向时,需要拿到完整 URL。PHP 从 $_SERVER 的多个字段拼接:协议、主机、端口、路径、查询串。本文讲解各字段含义、拼完整 URL、处理 HTTPS 和代理。
操作步骤
1. 获取完整当前 URL
function currentUrl() {
$scheme = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') || $_SERVER['SERVER_PORT'] == 443 ? 'https' : 'http';
$host = $_SERVER['HTTP_HOST'];
$uri = $_SERVER['REQUEST_URI'];
return $scheme . '://' . $host . $uri;
}
echo currentUrl();
2. 获取域名
echo $_SERVER['HTTP_HOST'];
3. 获取路径部分
echo parse_url(currentUrl(), PHP_URL_PATH);
4. 获取查询字符串
echo $_SERVER['QUERY_STRING'];
5. 反向代理下取真实协议
代理可能改写,需读代理头:
$scheme = $_SERVER['HTTP_X_FORWARDED_PROTO'] ?? 'http';
6. 拼接带参数新链接
$url = currentUrl() . '?page=2';
常见坑
- 直接用 HTTP_HOST,未带协议,相对链接出错。
- HTTPS 判断只看 HTTPS 变量,代理场景遗漏 X-Forwarded-Proto。
- 端口非 80/443 时未带端口,访问失败。
- REQUEST_URI 已含 ? 查询串,别重复拼接。
- HTTP_HOST 可被伪造,对外使用前校验白名单。
- CLI 命令行没有 $_SERVER 这些字段。
- 子目录部署时路径取 REQUEST_URI 而非 SCRIPT_NAME。
总结
用 scheme + HTTP_HOST + REQUEST_URI 拼完整 URL,HTTPS 结合代理头 X-Forwarded-Proto。parse_url 拆路径查询,注意非标准端口和 CLI 无此超全局。HTTP_HOST 对外使用要校验。
遇到问题加QQ23979811 协助处理