2011-09-08 110 views
5

我正在使用Symfony2重新编写一个旧项目,以便我可以试用该框架。我有这样的形式的网址:如何在Symfony2中使用查询字符串路由URL?

/profile/{id} 

以Symfony2做的时髦方式。然而,同样的页面最初做发现:

/profile.php?id=12345 

所以,万一有人有旧网址,我想重定向这些链接。问题是,我不知道如何捕捉这种性质的路线。我试过

/profile.php?id={id} 

但这似乎没有工作。我如何设置这条路线?

后续:我不想做“无所不包”(因为它是不直观的给我,让我担心未来的bug),我宁愿不通过htaccess的做了同样的原因。我认为最好的选择是在控制器中匹配“/profile.php”,检查查询字符串中是否存在“id”,并相应地重定向。如果没有,我会重定向到404

回答

3

我看到两个选项:

  1. 您在旧模式(/profile.php?id=54321)映射到新的(/资料/ 54321)使用mod_rewrite(以防你使用Apache)。

  2. 您在Symfony中编写了一个映射器。这意味着在你的路由列表的末尾指定将正好赶上一切都还没有钓到的模式:


whatever: 
    pattern: /{whatever} 
    defaults: { _controller: CoreBundle:Default:whatever } 
    requirements: 
    whatever: .+ 

对于(2)你必须检查什么请求对象为您提供查询(如getQueryString()),b/c我不确定是否有可能在路由中匹配?xyz。

+0

请问正确的mod_rewrite是:'RewriteRule^profile.php?id =(\ d +)$/profile/$ 1 [R = 301]'? –

+0

我只想验证这是最好的策略,因为我不是Apache htaccess shenanigans –

+0

Me的专家。你可以在这里测试重写:http://martinmelin.se/rewrite-rule-tester/。虽然我宁愿用SF来处理。因为路线现在是模型/逻辑的一部分。 – Raffael

相关问题