1

我已经用i18n和扩展控制器配置了 Codeigniter 2.1。

我隐藏了主控制器“main”,并保持可见的“admin”和“blog”控制器。

这个网址工作正常:

www.mysite.com/en/函数_

www.mysite.com/en/博客/ _ _

这是问题:www.mysite.com/it/blog/functionname

对于主控制器“博客”,“/”之后的所有内容都将被忽略。

是否有可能做到这一点?

我的 routes.php 文件:

$default_controller = "main";
$language_alias = array('it','en');
// exceptions
$controller_exceptions = array('admin','blog');
// route
$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'] = '';

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

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

如果我在我的 URL 中删除 lang 一切正常:

www.mysite.com/blog/functionname _ _ _

4

1 回答 1

1

我认为您的路线中需要另一个段来访问控制器功能。

所以你需要第二行:

// '/it', '/en' URIs -> use default controller
$route['^(it|en)$'] = $route['default_controller'];
// URI like '/en/about' -> use controller 'about'
$route['^(it|en)/(.+)$'] = "$2";
// URI like '/en/about/test' -> use controller 'about' with function 'test'
$route['^(it|en)/(.+)/(.+)$'] = "$2/$3";

我不在任何项目 atm 中使用 i18n 或支持多种语言,所以我无法测试,但这应该可以解决问题。

于 2013-06-20T15:18:35.150 回答