将老式查询字符串重写为现代 cakephp URL
Posted
技术标签:
【中文标题】将老式查询字符串重写为现代 cakephp URL【英文标题】:rewriting old-school query strings to modern cakephp URLs 【发布时间】:2013-04-08 04:53:09 【问题描述】:恳求您的宽容。我已经寻找答案并尝试了很多东西,所以我现在谦虚地转向这里寻求帮助。应该很简单:我正在迁移到 Cakephp,我想将我的旧查询字符串 (action=show&id=2) 重定向到 groovy cake URL (/Feature/view/2)。
我已经在 webroot 的 .htaccess 文件中尝试过这个:
RewriteCond %QUERY_STRING ^action=show&id=([0-9]+)$
RewriteRule /Features/view/%1? [R,L]
没有爱。我也试过了:
RewriteRule action=show&id=([0-9]+) /Features/view/$1 [L]
没有爱。
我尝试了 Cakephp 的 routes.php:
Router::connect('index.php?action=show&id=([0-9]+)',array('controller' => 'features', 'action' => 'view', 'id' => $1));
但我没有看到任何证据表明可以在 routes.php 中以这种方式使用正则表达式,所以这真的只是在祈祷。
这是可以做到的。正确的?感谢您的建议!
【问题讨论】:
【参考方案1】:我认为你可以在 router.php 中做到这一点!
也许,你可以逃脱:
Router::connect('?action=:action&id=:id',
array(
'controller' => 'myController',
'action' => 'myAction',
),
array(
'action' => '[a-zA-Z]+',
'id' => '[0-9]+',
)
);
或者(可能更好)一系列更具体的形式,例如:
Router::connect('?action=show&id=:id',
array(
'controller' => 'features',
'action' => 'view',
),
array(
'id' => '[0-9]+',
)
);
在这种情况下,action
和 id
将在 myController 中的 $this->request->params
中可用(对于像 id
这样的标准,甚至可能有 automagic 提供帮助!)
虽然我不确定路由元素 (:foo) 是否会像这样获取 GET 参数..
或者,您可以将所有内容发送到一个控制器,并且您应该会发现 GET 参数列在 $this->request->params['url']
中,因此您可以将控制器中的所有内容路由(我猜是其他控制器)。
这两种方法听起来都不太好,但我知道您希望保留一些旧版网址!
【讨论】:
以上是关于将老式查询字符串重写为现代 cakephp URL的主要内容,如果未能解决你的问题,请参考以下文章