Symfony2和mod_rewrite网址不起作用

时间:2011-10-13 11:41:15

标签: mod-rewrite symfony

我在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

1 个答案:

答案 0 :(得分:2)

好的,你问:

做某事:

app/config/routing.yml:

blog:
  pattern: /{customer}/{site}/content/{id}.{format}
  defaults: { _controller: TestBundle:Blog:view ,customer:foo, site:bar }

请勿触摸.htaccessapp_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

在这里: http://symfony.com/doc/2.0/book/routing.html