2

恳求你的放纵。我已经寻找答案并尝试了很多东西,所以我现在谦虚地转向这里寻求帮助。应该很简单:我正在迁移到 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 中以这种方式使用正则表达式,所以这实际上只是在祈祷。

有可能做到这一点。正确的?感谢您的任何建议!

4

1 回答 1

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]+',
    )
);

在这种情况下,action并且id可以$this->request->params在 myController 中使用(对于像这样的标准id,甚至可能有自动魔法来帮助!)

虽然我不确定路由元素(:foo)是否会像这样获取 GET 参数。

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

无论哪种方式听起来都不太好,但我知道您想保持一些旧版网址运行!

于 2013-04-23T02:55:53.107 回答