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

Laravel Redirect::intended在开发服务器产生多余编码URL问题

Redirect::intended 部署后URL重复编码问题解决方案

问题根因

该问题90%以上是由开发服务器的反向代理配置、Laravel可信代理配置不匹配导致的路径重复编码/拼接问题,本地无反向代理所以运行正常。

排查&修复步骤

  • 第一步:配置Laravel可信代理
    打开app/Http/Middleware/TrustProxies.php,将开发服务器的代理IP加入可信列表,开发环境可直接设置为允许所有代理:
protected $proxies = '*';

同时确认该中间件已在app/Http/Kernel.php的全局中间件组中启用。

  • 第二步:校验反向代理(以Nginx为例)配置
    检查站点配置的反向代理段,确保没有错误的重写规则,且正确转发请求头信息,参考正确配置:
location / {
    proxy_pass http://127.0.0.1:你的Laravel服务端口;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
}

注意proxy_pass的目标地址末尾不要多加多余斜杠,否则会导致路径拼接错误。

  • 第三步:校验Session存储的预期跳转地址
    如果上述配置修改后问题仍然存在,可在跳转前打印Session中存储的intended地址,确认是否写入时就已经被编码:
dd(session()->get('url.intended'));

如果打印结果本身就是%2Finvoice格式,说明全局中间件或路由逻辑中存在多余的URL编码操作,排查对应代码即可。

临时兼容方案

如果需要快速修复上线,可手动解码跳转地址:

$targetUrl = redirect()->intended()->getTargetUrl();
// 替换重复编码的斜杠
$targetUrl = preg_replace('#%2F#i', '/', $targetUrl);
return redirect()->to($targetUrl);

异常现象参考截图:
多余URL

内容的提问来源于stack exchange,提问作者Nergi Dos Santi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 16:45:01