CakePHP使用参数路由重定向

bvuwiixz  于 2022-11-11  发布在  PHP
关注(0)|答案(3)|浏览(162)

我需要保持搜索引擎优化链接活跃,所以我试图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) {
}

我总是得到没有参数传递给操作的错误。我错过了什么?:(

pkln4tw6

pkln4tw61#

在重定向路由中保留参数的选项不是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重定向,所以当对这样的重定向进行修改时,确保在修改后清空该高速缓存。
另请参阅

*操作手册〉路由〉重定向路由

bksxznpy

bksxznpy2#

这其实很简单,我用它根据管理员在控制面板中输入的内容动态生成一个重定向列表,我们用它来保持谷歌的流量,当URL发生变化,而谷歌机器人还没有重新扫描时。

$builder->redirect('/from-url', '/to-url', ['status' => 301]);
yzckvree

yzckvree3#

尝试以下方法,它对我有效:请求示例如下:本地主机:08080/获取用户名?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');

       }
   }

相关问题