我需要保持SEO链接处于活动状态,所以我正在尝试将301谷歌流量重定向到新的CakePHP路由。
我去:
http://localhost/jakne/someCategory/item-slug
并且我希望它重定向到301:
http://localhost/product/item-slug
所以我尝试了route::redirect
,但无法使其正常工作。关于此的文档也不存在:(
$routes->redirect(
'/jakne/:subcategory/:item',
['controller' => 'Catalog', 'action' => 'product'],
['status' => 301, 'pass' => ['item']]
);
我的Catalog::product
看起来像:
public function product($productId) {
}
我总是会收到错误消息,即未将任何参数传递给操作。我想念什么? :(
用于在重定向路由中保留参数的选项不是pass
(用于常规路由,它定义了要作为函数参数传递的参数),它是persist
,即您的路由必须类似于:
$routes->redirect(
'/jakne/:subcategory/:item',
['controller' => 'Catalog', 'action' => 'product'],
['status' => 301, 'persist' => ['item']]
);
这应该很好用,假设您连接了一个正确的目标路由,该路由具有一个名为item
的参数,类似。
$routes->connect(
'/product/:item',
['controller' => 'Catalog', 'action' => 'product'],
['pass' => ['item']]
);
通常,您可能要考虑在服务器级别进行此类重定向(例如,通过Apache上的mod_rewrite
,在性能方面要好得多。
ps。浏览器会缓存301
重定向,因此在对此类重定向进行更改时,请确保随后清除缓存。
另请参见