Codeigniter通过扩展控制器和多语言最小化url



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

我隐藏了主控制器"main",我保留了可见的"admin"one_answers"blog"控制器。

这个url可以正常工作:

www.mysite.com// functionname

www.mysite.com//博客/

我的问题是:www.mysite.com/, /博客/ functionname

对于主控制器"blog"/"之后的内容将被忽略。

这是可能的吗?

我的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/

/ functionname

我认为你需要在你的路由中另一个段来访问控制器函数。

所以你需要第二行:

// '/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";

我没有在任何项目中使用i18n或支持多种语言,所以我无法测试,但这应该可以做到。

最新更新