Redirect 带参数的CakePHP路由重定向

Redirect 带参数的CakePHP路由重定向,redirect,cakephp,routing,Redirect,Cakephp,Routing,我需要保持搜索引擎优化链接活跃,所以我试图301重定向谷歌交通到新的CakePHP路线 我去: http://localhost/jakne/someCategory/item-slug 我希望它重定向到: http://localhost/product/item-slug 所以我尝试了route::redirect,但我无法让它工作。关于此的文档也不存在:( $routes->重定向( “/jakne/:子类别/:项”, ['controller'=>'目录','action'=>'产品

我需要保持搜索引擎优化链接活跃,所以我试图301重定向谷歌交通到新的CakePHP路线

我去:

http://localhost/jakne/someCategory/item-slug
我希望它重定向到:

http://localhost/product/item-slug
所以我尝试了
route::redirect
,但我无法让它工作。关于此的文档也不存在:(

$routes->重定向(
“/jakne/:子类别/:项”,
['controller'=>'目录','action'=>'产品'],
['status'=>301,'pass'=>['item']]
);
我的
Catalog::product
看起来像:

公共功能产品($productId){
}
我总是得到一个错误,即没有向操作传递参数。
我缺少什么?:(

在重定向路由中保留参数的选项不是
pass
(这是用于常规路由并定义哪些参数作为函数参数传递),而是
persist
,即您的路由需要类似于:

$routes->重定向(
“/jakne/:子类别/:项”,
['controller'=>'目录','action'=>'产品'],
['status'=>301,'persist'=>['item']]
);
假设您连接了一个正确的目标路由,该路由具有一个名为
item
的参数,类似于

$routes->connect(
“/product/:item”,
['controller'=>'目录','action'=>'产品'],
['pass'=>['item']]
);
一般来说,您可能想考虑在服务器级别上执行这样的重定向(例如,通过Apache中的<代码> MODY-Read < /Calp>),性能更好,

另外,浏览器会缓存
301
重定向,因此在更改此类重定向时,请确保随后清除缓存

另见


试试这个方法,它对我来说很有用: 请求示例如下:localhost:08080/get username?id=%3Cid%3E

路线:

$routes->connect('/get-username', ['controller' => 'Users', 'action' => 'getUserName']);
控制器:

    class UsersController extends AppController {
       public function initialize() {
          parent::initialize();
           $this->loadComponent('RequestHandler');
       }

       public function beforeFilter(Event $event) {
          parent::beforeFilter($event);
          $this->set('_serialize', false);
          $this->Auth->allow([
            'getUserName'
          ]);
       }

       public function getUserName() {
        $id = $this->request->getQuery('id');

       }
   }

以前尝试过,但不起作用。它重定向到/product?item=value,这不是我想要的:(尝试使用htaccess规则,但即使这样也不起作用。出于某种原因,它会重定向到domain.com/var/www/html/webroot/products/:item@DavidLednik如果它作为查询字符串追加,则您可能没有如我的示例中所示的匹配目标路由,或者有另一个连接的路由正在捕获它我想用完整的路由配置更新您的问题。顺便说一句,每当您遇到路由问题时,请使用:
bin/cake routes
检查哪些路由是按哪个顺序连接的。最后放弃了这一点,使用了nginx重定向,因为它仍然位于CakePHP应用程序前面