0

CodeIgniter で多言語サイトを構築しています。次のように、ルートを使用して言語を強制的に URL に含めています。

// URI like '/en/about' -> use controller 'about'
$route['^(en|de|fr|nl)/(.+)$'] = "$2";

// '/en', '/de', '/fr' and '/nl' URIs -> use default controller
$route['^(en|de|fr|nl)$'] = $route['default_controller'];

これで、に行くとmydomain.com/auth/loginリダイレクトされますがmydomain.com/en/auth/login、特定の URL でのみこれを回避したいと思います。を呼び出す場合を除いて、常に言語を URLmydomain.com/get/123に含める必要があるように、そのままにしておく必要があります。

以前のルートの前にこれを追加しようとしましたが、失敗しました:

$route['get/(:num)'] = "get/$1";

助けてくれてありがとう、ルートが道に迷っています。

4

4 に答える 4

1

お役に立てば幸いです。

$default_controller = "webpages";
$language_alias = array('gr','fr');
$controller_exceptions = array('admin','forums');

$route['default_controller'] = $default_controller;
$route["^(".implode('|', $language_alias).")/(".implode('|', $controller_exceptions).")(.*)"] = '$2';
$route["^(".implode('|', $language_alias).")?/(.*)"] = $default_controller.'/$2';
$route["^((?!\b".implode('\b|\b', $controller_exceptions)."\b).*)$"] = $default_controller.'/$1';
foreach($language_alias as $language)
    $route[$language] = $default_controller.'/index';
$route['404_override'] = '';

実際に変更する必要があるのは、コードの最初の 3 行だけです。

$default_controller = "webpages";
$language_alias = array('gr','fr');
$controller_exceptions = array('admin','forums');

$language_alias は、たとえば多言語 Web サイトがある場合に追加する言語要素です。

もちろん、 http : //mycustomproject.com/grとhttp://mycustomproject.com/frは、基本的なコントローラーのインデックスにルーティングされます。

$controller_exceptions は、このルーティング構造に従わないコントローラーです。例えば:

ここから

于 2013-03-26T22:07:02.773 に答える
0

ローカライズされていない領域に組み込みの $special 配列を提供する新しいバージョンのライブラリを使用するだけではどうですか。

于 2013-03-31T22:30:55.063 に答える
0

mydomain.com/auth/login参考までに、からへのリダイレクトを強制することmydomain.com/en/auth/loginは、ルートファイルに関連するものではなくMY_Lang.php、ユーザーをデフォルト言語にリダイレクトするライブラリで提供されるファイルファイルです。

于 2013-04-02T21:05:16.130 に答える