Shopware测试环境中Router生成错误URL问题排查
在Shopware 6插件控制器中使用以下代码返回重定向:
return new RedirectResponse( $this->router->generate('frontend.cart.offcanvas', [], UrlGeneratorInterface::ABSOLUTE_PATH) );
- 本地dockware环境下,重定向头正常:
location: /checkout/offcanvas - Shopware测试环境下,重定向头异常:
location: http://****-hzvhn.sw-testenvironment.de/shop/public/,既不是预期的绝对路径,也不是目标路由,且因测试环境使用HTTPS导致混合内容请求被拦截 - 改用
UrlGeneratorInterface::ABSOLUTE_URL时,本地能生成同协议的正确URL,但测试环境仍生成HTTP URL
按照Symfony的UrlGeneratorInterface文档,结果不符合预期,请问这是Shopware测试环境配置错误还是我的理解有误?
这种情况大概率是测试环境的Shopware/Symfony路由配置或请求上下文异常,而非你对UrlGeneratorInterface的理解有误,具体排查方向如下:
检查测试环境的
trusted_proxies与trusted_hosts配置
Shopware测试环境通常部署在反向代理后(如Nginx),如果未正确配置trusted_proxies,Symfony无法识别真实的请求协议(HTTPS)和主机信息,导致生成错误的HTTP URL或路径。
在config/packages/framework.yaml中确认配置:framework: trusted_proxies: '%env(TRUSTED_PROXIES)%' trusted_hosts: '%env(TRUSTED_HOSTS)%'同时确保环境变量
TRUSTED_PROXIES设置为代理服务器的IP(或用*临时测试,生产环境不建议),TRUSTED_HOSTS设置为测试域名。验证测试环境的
router.request_context配置
Shopware的路由生成依赖请求上下文,若上下文的scheme(协议)、host或baseUrl配置错误,会直接导致URL生成异常。
可在控制器中临时打印上下文信息排查:dump($this->router->getContext());正常情况下,
scheme应为https,host是测试域名,baseUrl为空或对应正确的子路径(而非/shop/public/)。检查测试环境的Shopware基础URL配置
在Shopware后台「设置 > 系统 > 商店设置」中,确认「商店URL」设置为正确的HTTPS地址(如https://****-hzvhn.sw-testenvironment.de/),避免基础URL配置错误导致路由生成时拼接异常。排查反向代理的请求头传递
反向代理需要正确传递X-Forwarded-Proto、X-Forwarded-Host等请求头,让Shopware/Symfony识别真实的请求信息。例如Nginx配置中需添加:proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-For $remote_addr;
内容的提问来源于stack exchange,提问作者fxs

