我在我的网站中更改了链接的结构,添加了新的路由元素,我想重定向旧链接,为新路由元素添加默认值。
,就像之前的网址一样:mysite.com/category/product-name/
我改为看起来像这样:mysite.com/store-section/category/product-name/
我希望旧链接重定向到新链接,为它们添加默认的store-section元素。我想我无法使用mod_rewrite实现这一点,因为使用自定义routeClass从数据库中解析类别。
是否可以使用Router::redirect()
中的路径元素来实现此目的?
答案 0 :(得分:0)
由于我没有找到使用Router :: redirect()的方法,我保留了mi原始路径:
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参数, 如果不是,我发出重定向将默认商店部分添加到当前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');
}
//.................
}
}
这成功地为旧产品发布301新的URL,对SEO有用,并保持旧的入站链接在Cakephp中工作。