You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel如何获取带协议的当前站点域名及ngrok适配问题

在Laravel控制器中获取带协议的完整站点域名

我来帮你搞定这个问题,Laravel本身就有便捷的方法,同时也能解决ngrok这类反向代理场景下的特殊情况:

一、基础场景(正常生产/开发环境)

在控制器方法里,你可以直接用这两种方式获取带协议的完整域名:

  • request()->getSchemeAndHttpHost():这是最靠谱的方式,它直接从当前请求里提取协议(http/https)和主机名,比如请求https://example.com/some/path时,会精准返回https://example.com。
  • url('/'):这个方法会生成应用的根URL,同样包含协议和域名。不过要注意,它默认会参考.env里的APP_URL配置;如果当前请求的协议和APP_URL不一致(比如本地用https但APP_URL设的http),request()->getSchemeAndHttpHost()会更准确,因为它完全基于当前请求的实际信息。

给你个控制器里的代码示例:

public function getCurrentDomain()
{
    $fullDomain = request()->getSchemeAndHttpHost();
    // 也可以用 $fullDomain = url('/');
    return response()->json(['full_domain' => $fullDomain]);
}

二、解决ngrok反向代理下的问题

当你用ngrok的HTTPS随机域名访问本地服务时,Laravel默认返回http://localhost,这是因为Laravel不信任反向代理发送的头部信息,没法识别真实的协议和域名。解决步骤很简单:

  1. 配置信任代理:

    • 如果你用的是Laravel 8及以上版本,直接在.env文件里加一行:
      TRUSTED_PROXIES=*
      
      (⚠️ 注意:生产环境别用*,要指定你的反向代理服务器的具体IP,比如Nginx、Cloudflare的IP,避免安全风险)
    • 或者编辑config/trustedproxy.php文件,修改proxies配置项为允许的代理IP范围,比如:
      'proxies' => ['*'], // 开发环境可用,生产环境替换为具体IP
      
  2. 确认反向代理头部:
    ngrok会自动发送X-Forwarded-Proto(协议)和X-Forwarded-Host(主机名)这类头部,Laravel在信任代理后会自动识别这些信息,就能返回正确的HTTPS域名了。

配置完成后,再用ngrok访问你的接口,就能得到预期的带协议的随机域名啦~

内容的提问来源于stack exchange,提问作者Ahmad Badpey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:59:08