使用路由阻止CakePHP控制器访问

时间:2014-01-19 10:34:13

标签: php cakephp cakephp-routing

我正在关注CakePHP博客教程,目前正在关注网址

/posts/view/1

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

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

这样就是网址

/news/view/1

也适用。但是,/ posts / URL仍然有效。如何使用/ posts /仍然有效阻止URL?

3 个答案:

答案 0 :(得分:1)

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并将参数传递给   /文章/图。使用数组作为重定向目标允许您   使用其他路由来定义URL字符串应重定向到的位置。

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

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

答案 1 :(得分:0)

  1. 您可以重定向/发布到主页,例如:

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

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

答案 2 :(得分:0)

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

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

步骤1:我已将routes.php中的一个路由规则定义为

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

第2步:我在posts controller

中创建了一个函数handleRedirection
 function handleRedirection(){
  $url = str_replace('posts','news',$this->request->url)
  $this->redirect($url,'301');
 }

在上面的例子中看到我使用301永久重定向,所以你可以做这样的事情。