将旧式查询字符串重写为现代cakephp URL

时间:2013-04-15 22:53:17

标签: url cakephp query-string routes

请求放纵。我已经寻找答案并尝试了很多东西,所以我现在谦卑地转过来寻求帮助。它应该很简单:我正在转移到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 个答案:

答案 0 :(得分:0)

我认为你可以在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]+',
    )
);

在这种情况下,actionid可以在myController的$this->request->params中使用(对于像id这样的标准,甚至可能会自动生成帮助!)

虽然我不确定路由元素(:foo)会不会像那样选择GET参数...

或者,您可以将所有内容发送到一个控制器,您应该会发现$this->request->params['url']中列出了GET参数,因此您可以在控制器中路由所有内容(我想是其他控制器)。

听起来不是很好,但我知道你想保留一些遗留的网址!