推荐使用$request->fullUrl()获取当前完整URL,因其自动拼接协议、域名、路径和查询参数,兼容URL重写与PATH_INFO模式,但不包含锚点;已废弃$url(true),CLI/Swoole环境下需先判断再调用。

最常用也最稳妥的方式是:$request->fullUrl()。
为什么推荐 fullUrl()?
它自动拼接协议(http/https)、域名、路径和查询参数,一步到位,不用手动组合,也不依赖服务器环境变量是否可靠。
- 返回结果形如:
https://example.com/user/profile?id=123&tab=info - 兼容 URL 重写(如隐藏 index.php)和 PATH_INFO 模式
- 不包含锚点(#xxx),这点需注意——如果业务需要锚点,得额外从 $_SERVER['REQUEST_URI'] 提取
别用 url(true) —— 已废弃
在 ThinkPHP 5.1 后期及 6.0+ 中,$request->url(true) 已被移除。调用会直接报错:Method url does not exist。
如果你在旧项目里看到这种写法,应尽快替换为 $request->fullUrl() 或手动拼接:
立即学习“PHP免费学习笔记(深入)”;
$request->scheme() . '://' . $request->host() . $request->url()- 注意:$request->url() 返回的是「不含域名」的路径+查询字符串(如
/user/profile?id=123)
注意运行环境限制
这些方法在 CLI 或 Swoole 命令行环境下会异常,使用前建议判断:
if (!$request->isCli() && !$request->isSwoole()) { echo $request->fullUrl(); }- CLI 场景下可退回到 $_SERVER 变量组合(但需自行处理 HTTPS 判断、端口等细节)
获取当前模块/控制器/操作(常配套使用)
完整 URL 经常要配合路由信息一起用,比如日志记录或分享链接:
$request->module() . '/' . $request->controller() . '/' . $request->action()- 返回类似:
index/user/profile - 注意:该结果不受 URL 重写影响,反映的是实际匹配到的路由目标



















