Symfony 2.8子域名路由绑定失效问题求助
解决Symfony 2.8子域名路由加载AdminBundle的问题
咱们先揪出你配置里的核心问题:你在app/config/routing.yml里给admin路由加了prefix: /admin/,这会强制给AdminBundle下的所有路由自动添上/admin前缀。但你要的是访问admin.example.com(根路径)就加载AdminBundle,这就导致实际生成的路由变成了admin.example.com/admin/——和你预期的访问路径完全不匹配,自然会出现路由找不到的错误。
下面是一步步的修正方案:
1. 修正主路由配置(app/config/routing.yml)
删掉admin路由的prefix: /admin/配置,子域名下我们不需要额外的路径前缀,直接映射AdminBundle的路由即可:
app: resource: '@AppBundle/Resources/config/routing.yml' prefix: / admin: resource: "@AdminBundle/Resources/config/routing.yml" # 这里去掉prefix,默认就是映射根路径,不需要额外加前缀
2. 确认AdminBundle路由配置(AdminBundle/Resources/config/routing.yml)
你的这段配置其实是对的,再确认一遍host和path的设置,确保path对应子域名的根路径:
admin_homepage: path: / host: admin.example.com defaults: { _controller: AdminBundle:Index:home }
3. 本地开发必配置hosts文件
如果是在本地调试,得先修改系统hosts文件,把admin.example.com指向本地服务器IP(一般是127.0.0.1):
- Windows系统:编辑
C:\Windows\System32\drivers\etc\hosts - Linux/macOS系统:编辑
/etc/hosts
添加一行:
127.0.0.1 admin.example.com
4. 清除Symfony路由缓存
Symfony会缓存路由配置,修改完配置后必须清缓存才能生效:
# 开发环境执行这个 php app/console cache:clear --env=dev # 生产环境执行这个 php app/console cache:clear --env=prod
5. 验证路由配置
你可以用命令查看当前所有路由,确认admin_homepage的host和path是否符合预期:
php app/console router:debug
输出里应该能看到admin_homepage对应的host是admin.example.com,path是/。
这样配置完之后,访问admin.example.com就会加载AdminBundle的Index控制器home方法,访问example.com则加载AppBundle的路由,不会再出现路由找不到的错误了。
内容的提问来源于stack exchange,提问作者Teshan N.
相关产品推荐
相关产品推荐

