2011-10-13 106 views
1

我在routing.yml配置此模式:Symfony2中和mod_rewrite的网址无法正常工作

/{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不是预期的/foo/bar/content/42.html,而是content/42.html

我可以用我自己的替换app_dev.php并覆盖REQUEST_URI但我不想破解Symfony。

编辑: 卸下/{customer}/{site}部分从路由配置是无解的,因为我的工作多客户/多站点应用程序,我想隐藏通过一个URL的部分,所以我能指出我的浏览器到www.my-fancy-site.com和Apache重写这个URL到/foo/bar/content/42.html

回答

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 } 

但是这个方式URL保持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

+0

谢谢你的小费,但这并不为我工作,我清楚我的问题。对于令人困惑的问题抱歉。 – prehfeldt

+0

好主意,谢谢。 – prehfeldt

+0

@prehfeldt我认为解决方案是现货,它应该工作。实际的问题不是URL重写,而是你定义路由的方式。我对$ _SERVER [“REQUEST_URI”]也很困惑,但实际上这不是问题。 考虑一下http://localhost/content/42.html 的示例一旦请求触及了app_dev.php或app.php,那么symfony将查找route /content/42.html,因此您需要在此处定义此路由symfony的。 –