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

Laravel中request()->fullUrlWithQuery返回http而非https问题

问题分析与解决

出现这个问题的核心原因是 request()->fullUrlWithQuery() 方法基于当前请求实例的协议(scheme)生成 URL,而 URL::forceScheme('https') 仅全局设置了 Laravel URL 生成器的默认协议,二者作用对象不同。

具体场景及解决办法:

  1. 反向代理未配置信任代理
    如果应用部署在 Nginx、Apache 这类反向代理之后,Laravel 默认无法识别真实的请求协议(HTTPS),导致请求实例的协议仍为 HTTP。此时即使设置了 URL::forceScheme('https'),request() 相关方法仍会生成 HTTP 地址,而 url() 辅助函数则会遵循全局设置返回 HTTPS。

    解决:在 AppServiceProvider 的 boot 方法中添加信任代理配置:

    use Illuminate\Http\Request;
    use Illuminate\Support\Facades\URL;
    
    public function boot()
    {
        if (App::environment('production')) {
            URL::forceScheme('https');
            // 信任所有代理服务器,也可替换为你的代理IP列表
            Request::setTrustedProxies(['*'], Request::HEADER_X_FORWARDED_ALL);
        }
    }
    

    同时确保反向代理服务器已传递 X-Forwarded-Proto 头(比如 Nginx 配置中添加 proxy_set_header X-Forwarded-Proto $scheme;)。

  2. 视图缓存残留旧内容
    如果之前视图缓存过 HTTP 版本的 URL,即使代码修复后,缓存的视图仍会返回旧的 HTTP 地址。

    解决:清除视图缓存:

    php artisan view:clear
    
  3. 改用 URL 生成器方法替代请求实例方法
    直接使用 Laravel URL 生成器的 fullUrlWithQuery 方法,它会严格遵循 URL::forceScheme 的全局设置:

    <button
        class='ml-3 btn btn-success'
        onclick="exportSheet(this, '{{ url()->fullUrlWithQuery([ 'export' => 1 ]) }}')"
    >
        Export
    </button>
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 13:40:59