应使用 $request->url() 获取不带协议、域名和查询参数的纯路径,如 /user/profile;它比 fullurl() 更简洁,比 path() 更贴近原始请求路径且不含 query 字符串,还自动排除锚点,但在 cli 或 swoole 环境下需先判断环境是否支持。

直接用 $request->url(),它返回的就是不带协议、域名和查询参数的纯路径部分,比如 /user/profile。
为什么不用 fullUrl() 或其他方法
$request->fullUrl() 带完整 URL(含协议、域名、路径、查询参数),显然不符合“不带参数”的要求;$request->path() 虽然也返回路径,但它只含路由解析后的路径(可能被重写规则修改),而 $request->url() 更贴近原始请求路径结构,且不含 query 字符串,更稳定可靠。
注意 URL 重写的影响
如果启用了 Apache/Nginx 的 URL 重写(如隐藏入口文件),$request->url() 返回的是重写后的路径,不是原始 $_SERVER['REQUEST_URI']。多数情况下这正是你想要的——用户看到的干净路径。
- 访问
https://example.com/index.php/user/123?name=test→ 返回/user/123 - 开启重写后访问
https://example.com/user/123?name=test→ 同样返回/user/123
需要排除锚点(#xxx)吗
$request->url() 默认不含锚点(fragment),这点比手动解析 $_SERVER['REQUEST_URI'] 更省心。如果你曾用 parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH),现在换成 $request->url() 可以避免处理编码、锚点等边缘情况。
在 CLI 或 Swoole 环境下要先判断
这些方法在命令行或 Swoole 长连接环境下会报错,使用前建议加一层环境判断:
if (!$request->isCli() && !$request->isSwoole()) { $path = $request->url(); }- CLI 场景下可考虑回退到配置或约定路径,而非强行读取 HTTP 请求信息
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











