我在routing.yml
:
/{customer}/{site}/content/{id}.{format}
现在我想省略/{customer}/{site}
部分并用重写规则重写它。
Symfony已经有.htaccess
重写规则。我将其修改为
RewriteRule ^(.*)$ app_dev.php/foo/bar/$1 [QSA,L]
但是当我将浏览器指向http://localhost/content/42.html
时,我得到了这个例外:
No route found for "GET /content/42.html"
我摆弄了一下,发现了,为什么会出现这个问题:Symfony使用_SERVER['REQUEST_URI']
变量来解析请求,但是当你使用mod_rewrite时,这个var中的URL不是预期的{{1}但是/foo/bar/content/42.html
。
我可以用自己的content/42.html
替换app_dev.php
并覆盖REQUEST_URI
,但我不想破解Symfony。
修改:
从路由配置中删除/{customer}/{site}
部分不是解决方案,因为我正在处理多客户/多站点应用程序,我想通过URL隐藏这些部分,以便我可以将浏览器指向{{1并且apache将此URL重写为www.my-fancy-site.com
。
答案 0 :(得分:2)
做某事:
app/config/routing.yml:
blog:
pattern: /{customer}/{site}/content/{id}.{format}
defaults: { _controller: TestBundle:Blog:view ,customer:foo, site:bar }
请勿触摸.htaccess
或app_dev.php
中的重写规则
编辑:对于您的更新问题,您也需要这样:
app/config/routing.yml:
blog:
pattern: /
defaults: { _controller: TestBundle:Blog:view, customer:foo, site:bar, id:4 }
但这样网址会保留http://host/
。我会使用一个欢迎控制器,然后简单地从那里重定向到另一条路线...一个重定向应该没问题。
更确切地说:您需要两条路线和一个控制器才能重定向到您的路径。
请在这里RTFM: http://symfony.com/doc/2.0/book/controller.html#route-parameters-controller-arguments