【问题标题】:Cakephp routing 2.xCakephp 路由 2.x
【发布时间】:2016-03-09 11:22:32
【问题描述】:

我正在使用这个路由器规则:

Router::connect('/mp/*', array('controller' => 'objekts', 'action' => 'search', Router::queryString('')));

这按预期工作!

现在我尝试添加 301 重定向:

Router::redirect(
    '/mp/*',
    array(
        'controller' => 'objekts',
        'action' => 'search',
        Router::queryString('')
    ),
    array('status' => 301)
);

但这“只”导致 http://www.domain.com/objekts/search 查询字符串丢失。

我是否遗漏了语法中的任何内容?

【问题讨论】:

    标签: cakephp routes


    【解决方案1】:

    这是因为Router::queryString() 根据传递的参数创建了一个查询字符串。

    查询字符串 已经编译的查询字符串参数的字符串或要转换为查询字符串的参数数组。

    这意味着要让Router::queryString() 工作,您需要将一个数组或其他字符串传递给它。 Router::queryString(['foo' => 'bar', 'chicken' => 'nuggets']) 将创建 ?foo=bar&chicken=nuggets

    我假设您想获取 existing 查询字符串并将其与重定向 URL 一起传递。根据Redirect Routing 上的 CakePHP 2.0 文档:

    Router::redirect(
        '/home/*',
        array('controller' => 'posts', 'action' => 'view'),
        // or array('persist'=>array('id')) for default routing where the
        // view action expects $id as an argument
        array('persist' => true)
    );
    

    将 /home/* 重定向到 /posts/view 并将参数传递给 /posts/view。使用数组作为重定向目标允许您使用其他路由来定义 URL 字符串应重定向到的位置。

    这意味着array('persist' => true) 应该替换Router::queryString()

    【讨论】:

    • 你能解释一下 array('persist' => true) 的作用吗?这等于 301 重定向吗?作为我的第一个工作方式是 302 重定向,这就是我想要更改它的原因,因为我希望 Google 知道这些链接是 301 重定向。
    猜你喜欢
    • 1970-01-01
    • 2014-04-26
    • 1970-01-01
    • 2012-10-06
    • 2012-09-28
    • 1970-01-01
    • 2012-09-28
    • 2012-02-08
    • 2017-05-12
    相关资源
    最近更新 更多