Symfony EasyAdminBundle 3.0生产服务器出现ERR_TOO_MANY_REDIRECTS无限重定向问题
解决EasyAdminBundle 3.0生产环境无限重定向问题
先看你提供的代码,最后一行return $this->redirect($routeBuilder->setController(UserCrudController:>明显有语法错误(应该是UserCrudController::class),不过你说开发环境正常,大概率是粘贴时的笔误。针对生产环境的无限重定向问题,结合Symfony和EasyAdmin的特性,给你几个实用的排查和解决步骤:
1. 清理并预热生产环境缓存
Symfony生产环境会缓存路由、配置等所有资源,如果EasyAdmin的路由没有正确生成或者缓存过期,很容易导致跳转异常。执行以下命令:
php bin/console cache:clear --env=prod php bin/console cache:warmup --env=prod
执行完后再测试路由是否正常。
2. 检查Dashboard控制器的跳转逻辑
你的Dashboard控制器负责跳转到UserCrudController,要确保路由生成的代码完整且正确:
public function index(): Response { $routeBuilder = $this->get(AdminUrlGenerator::class); // 补充完整的控制器引用和URL生成代码 return $this->redirect($routeBuilder->setController(UserCrudController::class)->generateUrl()); }
另外,确认你的Dashboard控制器是否正确继承了AbstractDashboardController,并且实现了必要的配置方法(比如configureDashboard)——EasyAdmin 3.0对Dashboard的结构有严格要求,缺失配置可能引发跳转异常。
3. 排查安全配置的循环跳转
生产环境的Security配置往往和开发环境不同,权限控制不当会引发无限重定向:
- 检查
config/packages/security.yaml中的access_control规则,确保/admin路径的权限设置正确,比如:access_control: - { path: ^/admin/login, roles: PUBLIC_ACCESS } - { path: ^/admin, roles: ROLE_ADMIN } - 确认登录成功后的跳转路由不是
admin(也就是你的Dashboard路由),如果登录后跳转到admin,而admin又跳转到Crud控制器,但权限验证环节出现问题,就会形成循环。
4. 配置反向代理信任(针对Apache/Nginx部署)
如果你的生产环境使用了反向代理服务器,Symfony可能无法正确识别请求的真实URL(比如http/https、域名),导致生成的跳转URL错误,进而引发重定向循环:
- 在
config/packages/framework.yaml中添加:framework: trusted_proxies: '%env(TRUSTED_PROXIES)%' trusted_hosts: '%env(TRUSTED_HOSTS)%' - 在
.env.prod中设置对应的环境变量,比如:TRUSTED_PROXIES=127.0.0.1,你的服务器公网IP TRUSTED_HOSTS=your-production-domain.com
5. 分析日志定位循环路径
既然日志显示是Symfony引发的重定向,建议开启生产环境的debug日志,查看每次重定向的来源和目标URL:
- 修改
config/packages/prod/monolog.yaml,将日志级别设为debug:monolog: handlers: main: level: debug - 查看
var/log/prod.log,你会看到每次重定向的详细记录,比如302 Redirect from "admin" to "/admin/user",如果发现两个URL反复跳转,就能精准定位问题点。
内容的提问来源于stack exchange,提问作者bekanur98
相关产品推荐
相关产品推荐

