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);
异常现象参考截图:
内容的提问来源于stack exchange,提问作者Nergi Dos Santi
相关产品推荐
相关产品推荐

