使用“子路由”进行永久重定向

时间:2013-05-03 09:52:32

标签: php symfony routing

我需要在Sf2项目中更改路由系统的基础。

我使用FrameworkBundle:Redirect:urlRedirect永久重定向几条路线,如下所示:

# File : app/config/routing.yml
# ..
redirect_route_example:
    pattern: /foo
   defaults:
       _controller: FrameworkBundle:Redirect:urlRedirect
       path: /
       permanent: true
# ..

如果我的“主路线”/foo有很多子路由 (例如/foo/page1/foo/page2/foo/page1/subpage1等。

是否可以使用FrameworkBundle:Redirect:urlRedirect但使用正则表达式路线(例如/foo/* - > /*)做同样的事情?

1 个答案:

答案 0 :(得分:3)

我的想法只是在/foo之后添加一个参数,如/foo{subroutes},并允许在此参数中使用斜杠。所以我们基本上需要这个:

http://symfony.com/doc/master/cookbook/routing/slash_in_parameter.html

解决方案可能看起来像这样:

# File : app/config/routing.yml
# ..
redirect_route_example:
    path: /foo{subroutes}
    requirements:
        subroutes: ".*"
    defaults:
        _controller: FrameworkBundle:Redirect:urlRedirect
        path: /
        permanent: true
# ..

修改

请注意,此解决方案会将所有内容重定向到以/开头的/foo,这可能不是您想要的行为。如果您想保留子路由本身并且仅在开始时删除/foo,请使用密钥route而不是path和控制器FrameworkBundle:Redirect:redirect而不是{{ 1 {}在urlRedirect的{​​{1}}中,并使用参数defaults的路线。