2014-01-19 67 views
1

我下面CakePHP的博客教程防止CakePHP的控制器訪問,和此刻的URL與路由

/posts/view/1 

作品。使用路由,我設法創建一個別名消息:

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

這樣,URL

/news/view/1 

工作爲好。不過,/ posts/URL仍然適用。如何防止/ posts /仍然有效的URL?

回答

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永久重定向,所以你可以做這樣的事情。

+0

由於HTTP狀態,這個效果很好。讓我們希望CakePHP團隊稍後能夠添加此功能。 – ohyeah

+0

這不是真的,他重新發明了車輪,這已經是核心功能,請參閱http://api.cakephp.org/2.4/class-Router.html#_redirect – burzum

0
  1. 您可以重定向/職位主頁,例如:

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

  2. 你可以只重命名PostsController並調用它NewsController,如果你想使用這個詞。

1

Anubhavs答案在技術上是正確的,但是假設這個框架沒有被實現是錯誤的。事實上重定向的路由是核心的一部分:

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

在路由器連接一個新的重定向路由。

重定向路由與正常路由不同,因爲如果發現匹配,重定向路由將執行實際頭重定向 。重定向可以在您的應用程序中發生,或者重定向到外部位置 。

實例:

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

重定向/家/ *到/職位/視圖和參數傳遞到 /文章/圖。使用數組作爲重定向目標允許您使用其他路由來定義應將URL字符串重定向到的位置。

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

重定向/職位/ *到http://google.com與302

+0

只是想知道我們是否可以通過params使用相同? – Anubhav