带有参数的CakePHP路由重定向

问题描述 投票:0回答:1

我需要保持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) {
}

我总是会收到错误消息,即未将任何参数传递给操作。我想念什么? :(

redirect cakephp routing
1个回答
0
投票

用于在重定向路由中保留参数的选项不是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重定向,因此在对此类重定向进行更改时,请确保随后清除缓存。

另请参见

© www.soinside.com 2019 - 2024. All rights reserved.