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';

常见坑

  1. 直接用 HTTP_HOST,未带协议,相对链接出错。
  2. HTTPS 判断只看 HTTPS 变量,代理场景遗漏 X-Forwarded-Proto。
  3. 端口非 80/443 时未带端口,访问失败。
  4. REQUEST_URI 已含 ? 查询串,别重复拼接。
  5. HTTP_HOST 可被伪造,对外使用前校验白名单。
  6. CLI 命令行没有 $_SERVER 这些字段。
  7. 子目录部署时路径取 REQUEST_URI 而非 SCRIPT_NAME。

总结

用 scheme + HTTP_HOST + REQUEST_URI 拼完整 URL,HTTPS 结合代理头 X-Forwarded-Proto。parse_url 拆路径查询,注意非标准端口和 CLI 无此超全局。HTTP_HOST 对外使用要校验。

遇到问题加QQ23979811 协助处理


emer 发布于  2026-11-15 07:17 
'); })();