2013-02-18 25 views
0

我builiding笨上一个多语言的网站,我使用的路由强制的语言是在URL,就像这样:忽略笨国际化的路线,如果特定的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调用。就像我总是希望语言在URL中,除非您拨打mydomain.com/get/123,它应该保持原样。

我尝试了以前的路线前添加此,失败:

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

感谢你的帮助,路线让我迷路。

+0

您是否尝试添加所需的以避免URL在第一个正则表达式中忽略此内容,然后为此定义路由? – Maksym 2013-03-26 21:43:17

+0

我不明白你的问题? – 2013-03-26 21:51:40

+0

对不起。为什么它将你重定向到%/ EN /%?它是在.htaccess中定义的吗? – Maksym 2013-03-26 21:59:36

回答

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'] = ''; 

,你会真正关心改变的唯一事情是第三行代码:

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

的$ language_alias是你要如果你有一个多语种网站添加的语言元素例如:

当然http://mycustomproject.com/grhttp://mycustomproject.com/fr并且是路由到您的基本控制器的索引。

$ controller_exceptions是不遵循此路由结构的控制器。例如:

here

0

如何只使用它提供了内置的$特殊的数组非局部地区库的更新版本。

0

只是为了信息,强制重定向从mydomain.com/auth/loginmydomain.com/en/auth/login是不是相关的路由文件,它提供与用户的默认语言重定向库中的文件MY_Lang.php文件。