CakePHP 2.0:如何将/details.php?id=1234等网址重定向到/ articles / show / 1234?

时间:2012-05-15 11:04:54

标签: .htaccess url cakephp redirect

我已经检查了这个:CakePHP and .htaccess: how to redirect url with query string但它对我不起作用。

我在Google中有这样的网址:/details.php?id = 1234并希望将其重定向到网址/详情/ 1234

有没有办法使用蛋糕重定向:http://book.cakephp.org/2.0/en/development/routing.html#redirect-routing

或者我需要在htaccess中执行此操作吗?如果是的话,在哪一个? / root / htaccess还是/ root / webroot / htaccess?

请指教! 非常感谢提前!

1 个答案:

答案 0 :(得分:0)

我的应用程序中存在类似的情况,我按以下方式处理:

基本上,我使用的URL系统与现在不同。书签在Facebook和整个网络上....无论如何,人们正在访问我的页面

http://www.domain.com/?c=123&a=2261

c = 123指的是文章所属的类别,a = 2261是指参与迁移到我的新网站的文章ID。现在我的网址如下:

http://www.domain.com/article/slug-for-the-article-in-question

我在app_controller.php

中使用了以下代码
function CheckOldUrl(){
    preg_match("/a=(\\d{1,})/ui", $_SERVER['REQUEST_URI'], $matches);
    if(!$matches == NULL){
        $this->redirect('/articles/articleRedirect/'.$matches[1]);
    }
}

然后我在我的文章控制器(articleRedirect)中设置了一个函数来检查DB中的正确文章,获取它的slug并重定向到正确的新文章url。

function articleRedirect($article_id = NULL){
        $this->Article->recursive = -1;
        $slug = $this->Article->findById($article_id);        
        if($slug == NULL){
            $this->Session->setFlash('This article does not exist!','default',array('class'=>'alert_error'));
            $this->redirect('/articles');
        }else{
            $this->redirect('/article/'.$slug['Article']['slug']);
        }
}


无论如何,对于你我会建议如下,虽然我没有测试过它......

function beforeFilter(){
    ...
    $this->CheckOldUrl();
    ...
}

function CheckOldUrl(){
    preg_match("/id=(\\d{1,})/ui", $_SERVER['REQUEST_URI'], $matches);
    if(!$matches == NULL){
        $this->redirect('/articles/show/'.$matches[1]);
    }
}