PHP 5.5 と Kohana 3.3 を使用しています
私は、uri の最初の「項目」としてユーザーの言語設定を常に持つ Web サイト構造を開発しています。
例えば:
mydomain.com/en/products
mydomain.com/de/store
さて、一部のユーザーは賢く、次のように入力しようとするでしょう。
mydomain.com/products
これで問題ありません。ルートを変更してもらいたいだけです
mydomain.com/en/products
すべての一貫性を保つために。
以下のコードは、URI に「ディレクトリ」が 1 つしかない限り機能します。
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);
}
}