2

我正在关注 CakePHP 博客教程,目前是 URL

/posts/view/1

作品。使用路由,我设法创建了一个别名新闻:

Router::connect('/news/:action/*', array('controller' => 'posts'));
Router::connect('/news/*', array('controller' => 'posts'));

这样,网址

/news/view/1

也可以。但是,/posts/ URL 仍然可以正常工作。如何防止带有 /posts/ 的 URL 仍然有效?

4

3 回答 3

2

Anubhavs 的回答在技术上是正确的,但假设这还没有在框架中实现是错误的。实际上重定向路由是核心的一部分:

http://api.cakephp.org/2.4/class-Router.html#_redirect

在路由器中连接一个新的重定向路由。

重定向路由与普通路由不同,因为如果找到匹配项,它们会执行实际的标头重定向。重定向可以发生在您的应用程序中,也可以重定向到外部位置。

例子:

Router::redirect('/home/*', array('controller' => 'posts', 'action' => 'view'), array('persist' => true));

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

Router::redirect('/posts/*', 'http://google.com', array('status' => 302));

将 /posts/* 重定向到http: //google.com,HTTP状态为 302

于 2014-01-19T17:22:55.910 回答
0
  1. 您可以将 /posts 重定向到主页,例如:

    Router::connect('/posts', array('controller' => 'pages', 'action' => 'display', 'home'));

  2. 如果您想使用这个术语,您可以重命名 PostsController 并将其命名为 NewsController。

于 2014-01-19T11:17:14.327 回答
0

你的问题的答案有点棘手,cakephp 文档中没有任何内容

我在类似情况下所做的如下:

第 1 步:我在 routes.php 中定义了一个路由规则为

 Router::connect('/posts/*', 
                            array('controller' => 'posts', 
                                  'action' => 'handleRedirection')
                );

第2步:我在posts控制器中创建了一个函数handleRedirection

 function handleRedirection(){
  $url = str_replace('posts','news',$this->request->url)
  $this->redirect($url,'301');
 }

请参阅上面的示例,我正在使用 301 永久重定向,因此您可以执行类似的操作。

于 2014-01-19T15:37:43.683 回答