【问题标题】:Codeigniter minimize URLs with extending controller and multilingualCodeigniter 通过扩展控制器和多语言最小化 URL
【发布时间】:2013-06-20 13:54:46
【问题描述】:

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

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

这个网址很好用:

www.mysite.com/ zh / 函数名

www.mysite.com/ zh / 博客 /

这是我的问题: www.mysite.com/ it / 博客 / 函数名

对于主控制器“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/ 博客 / 函数名

【问题讨论】:

    标签: codeigniter codeigniter-2 codeigniter-url


    【解决方案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 或支持多种语言,所以我无法测试,但这应该可以解决问题。

    【讨论】:

    • 感谢您的回复,但似乎不起作用。我认为问题出在这里:$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';
    • 我更改了答案,我将默认设置移到了顶部。它永远不会与底部的默认值一起使用。
    • 如果我将默认设置移到顶部,则主 URL 不起作用:www.mysite.com/it/article
    • 文章在你的情况下是控制器还是函数?
    • 感谢您的帮助! :)
    猜你喜欢
    • 1970-01-01
    • 2012-03-18
    • 2015-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-09
    • 2020-03-09
    相关资源
    最近更新 更多