
使用 $_SERVER['REQUEST_URI'] 可直接获取当前请求的完整路径及查询字符串(如 /index.php?page=home),无需手动拼接,安全且兼容多参数场景。
使用 `$_server['request_uri']` 可直接获取当前请求的完整路径及查询字符串(如 `/index.php?page=home`),无需手动拼接,安全且兼容多参数场景。
在 PHP 开发中,若需生成指向当前页面(含所有查询参数)的链接,仅提取 SCRIPT_NAME(如 substr($_SERVER["SCRIPT_NAME"], strrpos(...)+1))是不够的——它只返回脚本文件名(如 index.php),完全忽略查询字符串(?page=home)和路径中的子目录部分。
正确做法是使用 $_SERVER['REQUEST_URI'],它返回从域名之后开始的完整请求路径,包括路径、文件名及全部查询参数。例如:
- 当访问
https://example.com/blog/article.php?id=123&lang=zh时,$_SERVER['REQUEST_URI']的值为:/blog/article.php?id=123&lang=zh
因此,构建带完整参数的链接只需:
<a href="https://example.com<?php%20echo%20htmlspecialchars(%24_SERVER['REQUEST_URI'],%20ENT_QUOTES,%20'UTF-8');%20?>" title="当前页面(含参数)"> 查看此页完整地址 </a>
✅ 优势:
- 自动包含任意数量与格式的查询参数(
?a=1&b=2&c[]=x&c[]=y); - 支持重写后的路径(如
/article/123,前提是 Web 服务器已正确设置REQUEST_URI); - 无需解析或拼接,简洁可靠。
⚠️ 重要注意事项:
-
$_SERVER['REQUEST_URI']由客户端提供,可被恶意篡改,切勿直接用于重定向、SQL 查询或文件操作; - 在输出到 HTML 前务必使用
htmlspecialchars()进行转义,防止 XSS 攻击; - 极少数情况下(如通过
stream_context_create()并设置'request_fulluri' => 1),REQUEST_URI可能包含协议和域名(如https://example.com/path?x=1),此时需先校验并截断。常规 Web 服务器(Apache/Nginx + PHP-FPM)部署下不会出现该情况。
? 进阶提示:若需获取绝对完整 URL(含协议、域名、端口),可组合多个 $_SERVER 变量(如 $_SERVER['HTTPS'] ?? 'off'、$_SERVER['HTTP_HOST']、$_SERVER['REQUEST_URI']),但对内部跳转或同域链接,https://example.com<?php echo $_SERVER['REQUEST_URI']; ?> 已足够稳健且语义清晰。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











