我正在使用Symfony2重新编写一个旧项目,因此可以尝试该框架。我有以下形式的网址:

/profile/{id}

以Symfony2的时髦方式做到这一点。但是,最初通过执行以下操作找到了同一页面:
/profile.php?id=12345

因此,如果有人使用旧的URL,我想重定向这些链接。问题是,我不知道该如何捕捉这种性质的路线。我试过了
/profile.php?id={id}

但这似乎没有用。如何设置此路线?

后续操作:我不想做“包罗万象”(因为这对我来说是不直观的,所以我担心将来的错误),出于相同的原因,我不希望通过htaccess进行操作。我认为最好的选择是匹配“/profile.php”,然后在 Controller 中,检查“id”是否存在于查询字符串中并进行相应的重定向。如果没有,我将重定向到404。

最佳答案

我在这里看到两个选择:

  • 您可以使用mod_rewrite(如果使用Apache)将旧模式(/profile.php?id=54321)映射到新模式(/profile/54321)。
  • 您在Symfony中编写了一个映射器。这意味着在路由列表的末尾,您将指定一个仅捕获尚未捕获的所有内容的模式:

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

    对于(2),您将必须检查请求对象为查询提供了什么内容(例如getQueryString()),b/c我不确定是否可以在路由中匹配?xyz之类的东西。

    10-04 21:34
    查看更多