Symfony2中和mod_rewrite的网址无法正常工作
我在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
。
好,你问:
做某事,如:
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 }
但是这个方式URL保持http://host/
。我会使用一个受欢迎的控制器,然后简单地重定向到其他路由...一个重定向应该没问题。
更确切地说:您需要两条路线和一个控制器才能重定向到您的路线。
请RTFM这里: http://symfony.com/doc/2.0/book/controller.html#route-parameters-controller-arguments
谢谢你的小费,但这并不为我工作,我清楚我的问题。对于令人困惑的问题抱歉。 – prehfeldt
好主意,谢谢。 – prehfeldt
@prehfeldt我认为解决方案是现货,它应该工作。实际的问题不是URL重写,而是你定义路由的方式。我对$ _SERVER [“REQUEST_URI”]也很困惑,但实际上这不是问题。 考虑一下http://localhost/content/42.html 的示例一旦请求触及了app_dev.php或app.php,那么symfony将查找route /content/42.html,因此您需要在此处定义此路由symfony的。 –