Laravel 在 HTTPS 环境下获取不到 GET 参数,主因是反向代理(Nginx/Apache)未透传查询字符串或未正确配置 TrustProxies 中间件;需检查 try_files 指令是否含 $is_args$args、$proxies 设置是否合理、CDN 是否剥离参数,以及 APP_URL 是否为 HTTPS。

HTTPS 环境下 Laravel 获取不到 GET 参数,大概率不是代码问题,而是服务器转发头缺失或误配。 你用 $request->query() 或 $request->input('key') 拿不到值,$_GET 却有,说明请求确实到了 PHP,但 Laravel 的 Request 对象没正确解析——根源通常在反向代理(Nginx / Apache)未透传原始查询字符串,或未告知 Laravel 当前是 HTTPS 上下文。
Nginx 反向代理未透传 $is_args$args 导致 GET 参数丢失
宝塔、LNMP 或自建 Nginx 常见错误:location 块里漏写 $is_args$args,导致所有请求被重写为 /index.php 而不带查询参数。
- 错误配置(参数消失):
try_files $uri $uri/ /index.php; - 正确配置(保留 GET):
try_files $uri $uri/ /index.php?$query_string;或更推荐的try_files $uri $uri/ /index.php$is_args$args; - 注意:
$query_string和$is_args$args功能等价,但后者更符合 Laravel 官方推荐写法 - 改完必须执行
nginx -t && nginx -s reload,否则不生效
HTTPS 下 trustProxies 中间件未启用或配置错误
Laravel 默认不信任代理传来的 X-Forwarded-Proto 头,导致它认为当前是 HTTP 请求,进而忽略 HTTPS 场景下的某些 URL 构造逻辑(间接影响 QueryString 解析一致性)。
- 确认
App\Http\Middleware\TrustProxies已在app/Http/Kernel.php的$middleware中注册 - 检查
$proxies属性是否设为'*'(开发环境)或明确 IP 段(生产环境),例如:protected $proxies = ['127.0.0.1', '192.168.1.0/24']; - 确保
$headers包含Illuminate\Http\Request::HEADER_X_FORWARDED_PROTO,否则 Laravel 不会把X-Forwarded-Proto: https当真
Cloudflare / CDN 后端未开启“强制 HTTPS”或 header 被剥离
如果你用了 Cloudflare、腾讯云 CDN 或阿里云全站加速,它们默认可能不透传原始查询参数,或在开启“自动 HTTPS 重写”时丢弃了 query string。
- Cloudflare 控制台 → SSL/TLS → Edge Certificates → 关闭 “Always Use HTTPS”(临时测试用),看 GET 是否恢复;若恢复,说明是重写规则干扰
- CDN 缓存配置中检查“URL 参数”是否设为“忽略”或“过滤”,应改为“缓存并传递全部参数”
- 后端 Nginx 若启用了
proxy_pass,确认未手动清空proxy_set_header中的QUERY_STRING或覆盖REQUEST_URI
真正容易被忽略的是:即使 Nginx 配置正确,如果 Laravel 的 APP_URL 在 .env 里写的是 http:// 开头,某些辅助函数(如 url()、route())生成的链接会降级为 HTTP,浏览器发起跳转时可能丢掉 GET 参数;务必核对 APP_URL=https://yourdomain.com。


















