2

我正在尝试使用以下代码重定向/my-old-url/$slug到CakePHP:/news/$slug

Router::redirect(
    '/my-old-url/*',
    array('controller' => 'news', 'action' => 'view'),
    array('persist' => true)
);

使用此代码会引发错误(可能是错误?)

警告 (2):为 foreach() 提供的参数无效 [CORE/Cake/Routing/Route/CakeRoute.php,第 381 行]

public function persistParams($url, $params) {
    foreach ($this->options['persist'] as $persistKey) {

即使尝试以下代码也不起作用:

Router::redirect(
    '/my-old-url/:slug',
    array('controller' => 'news', 'action' => 'view'),
    array('persist' => array('slug'))
);

此代码将我重定向到/news/view没有任何参数。

我使用以下代码连接新闻 URL:

Router::connect('/news',
    array('controller' => 'news', 'action' => 'index')
);
Router::connect('/news/:slug',
    array('controller' => 'news', 'action' => 'view'),
    array('pass' => array('slug'))
);

该怎么办?

4

3 回答 3

0

您是否为新网址正确设置了路由?

Router::connect(
    '/news/:slug',
    array('controller' => 'news', 'action' => 'view'),
    array('pass' => array('slug'), 'slug' => '[\w]')
);

然后让它做重定向

Router::redirect(
    '/old-url/:slug',
    array('controller' => 'news', 'action' => 'view'),
    array('persistent' => true, 'pass' => array('slug'))
);

我认为您不需要[\w]在重定向中再次定义 slug ( ),但如果它不起作用,请尝试 ( 'slug' => '[\w]'after 'pass')。

显然,在尝试重定向之前,您需要测试/news/test路由是否按预期工作。

于 2013-08-23T15:45:13.813 回答
0

试试下面的代码

Router::connect('/my-old-url/*', array('controller' => 'News','action' => 'view'),array('params' => '[a-zA-Z0-9]+'));
于 2013-08-26T06:02:55.040 回答
-1

CakePHP 中可能存在一个错误。升级到最新版本(当前为 v2.3.9)就可以了。我问题中的代码确实有效。

于 2013-08-30T13:40:55.103 回答