1

我在我的站点中更改了链接的结构,添加了一个新的路由元素,我想重定向旧链接,为新的路由元素添加一个默认值。

即以前的网址是这样的:mysite.com/category/product-name/

我变成了这样:mysite.com/store-section/category/product-name/

我希望旧链接重定向到新链接,为它们添加默认的 store-section 元素。我认为我无法使用 mod_rewrite 实现这一点,因为类别是使用自定义 routeClass 从数据库中解析的。

是否可以使用路由元素Router::redirect()来实现这一点?

4

1 回答 1

0

由于我还没有找到使用 Router::redirect() 的方法,所以我保留了原始路由:

Router::connect("/:category/:product-name/*", 
    array(
        'controller' => 'products', 'action' => 'view'
    ), 
    array(
        'routeClass' => 'CategoryRouteClass', 
        'pass' => array('category', 'product-name')
    )
);

并添加新路由以匹配新 URL,指向相同的方法和相同的控制器,但添加新的路由元素并将其作为方法参数传递:

Router::connect("/:store-section/:category/:product-name/*", 
    array(
        'controller' => 'products', 'action' => 'view'
    ), 
    array(
        'routeClass' => 'CategoryRouteClass', 
        'pass' => array('category', 'product-name', 'store-section')
    )
);

...然后在产品控制器的视图方法中,我检查是否设置了 store-section 参数,如果不是,我发出重定向,将默认 store-section 添加到当前 URL,如下所示:

Class ProductsController extends AppController {
    public function view($category= null, $product-name = null, 
        $store-section = null) {

        if (empty($store-section)) {
            $this->redirect(array(
                'controller' => 'products', 'action' => 'view', 
                'category' => $category,
                'product-name' => $product-name, 
                'store-section' => 'default-section'), '301');
        }

        //.................
    }
}

这成功地将旧产品 url 发出 301 到新产品,这对于 SEO 和保持旧的入站链接在 Cakephp 中工作很有用。

于 2013-09-16T18:03:33.350 回答