thinkphp 中可通过 request()->url(true) 一键获取含协议、域名、路径及查询字符串的完整 url;也可分别调用 domain()、pathinfo()、server('query_string') 等方法灵活提取各部分并自定义拼接。

ThinkPHP 中可以通过内置的 Request 类一次性获取完整的请求 URL(含域名、路径和查询字符串),无需手动拼接。
使用 url(true) 获取完整 URL
Request 对象的 url() 方法支持传入 true 参数,返回带协议、域名、路径及完整查询字符串的绝对 URL:
-
在控制器中:
$fullUrl = \think\Request::instance()->url(true); -
或使用助手函数(ThinkPHP 6.x 推荐):
$fullUrl = request()->url(true); -
结果示例:
https://example.com/index/user/list?page=1&size=10
单独提取域名 + 路径(不含查询参数)
如果只需要协议 + 域名 + PATH(不带 ? 后面的内容),可用:
-
$baseUrl = request()->domain() . request()->pathinfo();
注意:pathinfo()返回的是路由解析后的路径(如index/user/list),不是原始 URL 路径 - 要获取原始请求路径(含子目录),用:
$rawPath = request()->server('REQUEST_URI');
再配合parse_url($url, PHP_URL_PATH)提取纯路径部分
获取查询字符串(query string)本身
直接拿到 ?key=val&foo=bar 这样的字符串片段:
-
$queryString = request()->server('QUERY_STRING');
返回原始查询字符串(未解码,如name=%E5%BC%A0%E4%B8%89&id=123) - 若需解码后参数数组,用:
$params = request()->param();(自动处理 GET/POST/路由参数)
组合自定义完整路径(域名 + 路径 + 查询串)
当需要精确控制拼接逻辑(例如排除某些参数或调整路径)时:
$domain = request()->domain();$path = request()->pathinfo() ?: '/';$query = http_build_query(request()->param());$customUrl = $domain . $path . ($query ? '?' . $query : '');
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











