我正在使用Symfony2重写一个旧项目,所以我可以试用这个框架.我有以下形式的网址:
/profile/{id}
Run Code Online (Sandbox Code Playgroud)
以Symfony2做的时髦方式.但是,最初通过执行以下操作找到了同一页面:
/profile.php?id=12345
Run Code Online (Sandbox Code Playgroud)
因此,如果某人有旧网址,我想重定向这些链接.问题是,我不知道如何捕捉这种性质的路线.我试过了
/profile.php?id={id}
Run Code Online (Sandbox Code Playgroud)
但这似乎不起作用.我该如何设置这条路线?
后续行动:我不想做"全能"(因为它对我来说不直观,所以我担心未来的错误),我宁愿不通过htaccess这样做也是出于同样的原因.我认为最好的选择是匹配"/profile.php"然后在控制器中,检查查询字符串中是否存在"id"并相应地重定向.如果没有,我将重定向到404.
我在这里看到两个选择:
您可以使用 mod_rewrite 将旧架构 (/profile.php?id=54321) 映射到新架构 (/profile/54321)(如果您使用 Apache)。
您在 Symfony 中编写一个映射器。这意味着在路由列表的末尾指定一个模式,该模式将捕获尚未捕获的所有内容:
whatever:
pattern: /{whatever}
defaults: { _controller: CoreBundle:Default:whatever }
requirements:
whatever: .+
Run Code Online (Sandbox Code Playgroud)
对于(2),您必须检查请求对象为您提供的查询(如 getQueryString()),b/c 我不确定是否可以在路由中匹配 ?xyz 之类的内容。