我使用PHP 5.5和3.3的KohanaKohana的路由(和重路由)問題
我開發一個網站結構總是有用戶爲URI的第一個「項目」的語言首選項。
例如:
mydomain.com/en/products
mydomain.com/de/store
現在,我相信有些用戶會嘗試聰明和類型的東西,如:
mydomain.com/products
這是很好的,我只是想讓他們重新路由到
mydomain.com/en/products
保持一切。
只要uri在URI中只有一個「目錄」,我就可以使用下面的代碼,例如:
mydomain.com/products
mydomain.com/store
但不喜歡的URI進一步下跌的子目錄,如:
mydomain.com/products/something
mydomain.com/store/purchase/info
這裏是我的路線:
Route::set('home_page', '(<lang>)')
->defaults(array(
'controller' => 'Index'
));
Route::set('default', '(<lang>(/<controller>(/<action>(/<subfolder>))))')
->defaults(array(
'controller' => 'Index',
'action' => 'index'
));
這裏是我的父控制器的代碼,所有其他控制器繼承:
public function before()
{
$this->uri = $this->request->uri();
$this->lang = $this->request->param('lang');
//If user directly inputted url mydomain.com without language information, redirect them to language version of site
//TODO use cookie information to guess language preferences if possible
if(!isset($this->lang))
{
$this->redirect('en/', 302);
}
//If the first part of path does not match a language redirect to english version of uri
if(!in_array($this->lang, ContentManager::getSupportedLangs()))
{
$this->redirect('en/'.$this->uri, 302);
}
}
當用戶沒有指定一個郎(url,en,fr或pl)時,這不會提供404嗎?我想採用url'/ products/something'並將它們路由到'/ en/products/something'。我希望用戶完全不知道他們必須在url中指定一種語言,如果他們在地址欄中輸入地址 – thatidiotguy
否它不會提供404:嘗試它!原因是路由中的( /)'中的括號使該部分可選。因此,如果找不到支持語言的匹配,就會將它視爲不在那裏。 –
Jonathan
當然你是對的。對不起,我剛剛開始試用。非常感謝您的建議。 – thatidiotguy