2014-05-13 76 views
0

我使用的Kohana框架3.2使用Kohana的路由重定向

通常在我的引導文件,我可以設置一個路由設置::像這樣:

Route::set('faq', 'faq')->defaults(array('controller' => 'home', 'action' => 'faq')); 

這確實如此example.com/faq指向我的控制器主頁,操作常見問題。

我想知道我是否可以通過這種方式設置重定向?

所以我可以說example.com/faq應該重定向到example.com/thegreatfaqs?

或者必須像上面那樣使用route :: set,把一個控制器然後請求重定向到/ thegreatfaqs?

回答

1

沒有什麼內置在Kohana中的路線內處理重定向。

我通常做的是路由到一個重定向控制器,它具有我所有的重定向規則,並在那裏處理重定向。

+0

你會怎麼做到這一點?路由到重定向控制器=這意味着您製作一個抓取所有內容的路線(如默認路線),然後從控制器檢查您的規則,如果exam​​ple/faq應該重定向到google.com/blabla?如果不是,我們還需要其他路線呢?你把重定向路線放在所有其他路線的末端嗎? – Karem

+1

是的,這是最後一條路線。在沒有找到重定向匹配的情況下,你可以拋出404異常,或者如果你有一些錯誤控制器/操作,你可以直接調用它。 –

0

你可以這樣設置你的路線....>

Route::set('faq', 'thegreatfaqs(/<action>(/<id>))') 
->defaults(array(
    'controller' => 'home', 
    'action' => 'faq', 
)); 
+0

這指向我不尋求的控制器/操作。我想設置一個重定向,所以example.com/faq可以指向任何地方,它可以是一個外部網站,如google.com/faq – Karem

+0

好吧..更乾淨的解決方案將實施,如斯科特在這裏回答。 – TechBuddy

1

爲此,您可以使用Route filter,但我認爲這是一個壞主意因爲你打斷Kohana的應用程序的正常流動。

Route::set('redirecturl', 'redirecturl') 
->filter(function($route, $params, $request) { 
    header('Location: http://www.example.com/'); 
    exit; 
}); 

我建議一個Redirect rule(Apache的htaccess的)或從一個專用控制器動作重定向如由Scott提到的更清潔的解決方案。