将老式查询字符串重写为现代 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]+',
    )
);

在这种情况下,actionid 将在 myController 中的 $this->request->params 中可用(对于像 id 这样的标准,甚至可能有 automagic 提供帮助!)

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

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

这两种方法听起来都不太好,但我知道您希望保留一些旧版网址!

【讨论】:

以上是关于将老式查询字符串重写为现代 cakephp URL的主要内容,如果未能解决你的问题,请参考以下文章

将 URL 重写为 Apache 和 Nginx 上的查询字符串

cakephp 在 Ubuntu 上无法进行 url 重写

Cakephp无法从URL获取查询字符串

将本地文件传递到 Java 中的 URL

是否可以在现代 GPU 上进行老式 2d 位图?

使用多个查询字符串重写 IIS URL