我正在使用 PHP 5.5 和 Kohana 3.3
我正在开发一个网站结构,它始终将用户的语言偏好作为 uri 的第一个“项目”。
例如:
mydomain.com/en/products
mydomain.com/de/store
现在,我确信一些用户会尝试并聪明地输入以下内容:
mydomain.com/products
很好,我只是希望他们被重新路由到
mydomain.com/en/products
保持一切一致。
只要uri在URI中只有一个“目录”,我下面的代码就可以工作,例如
mydomain.com/products
mydomain.com/store
但不适用于 uris,例如以下子目录:
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);
}
}