所以我使用的是Codeigniter 2.1 Internationalization i18n Library,我需要调整我的路线,以便在我删除控制器名称的短网址中使用语言参数:
$route['default_controller'] = "home";
#$route['^(en|es|ro)/(.+)$'] = "$2";
#$route['^(en|es|ro)$'] = $route['default_controller'];
$route['results$'] = "fetch/results";
$route['video/(:any)'] = "fetch/video/$1";
$route['tag/(:any)'] = "fetch/tag/$1";
$route['404_override'] = '';
所以我需要让这项工作http://localhost/app/en/results?query=t-shirts
而不是http://localhost/app/en/fetch/results?query=t-shirts
我该如何实现?
编辑:
$route['^(en|es|ro)/results$'] = "fetch/results";
$route['^(en|es|ro)/video/(:any)'] = "fetch/video/$1";
$route['^(en|es|ro)/video/(.+)$'] = $route['^(en|es|ro)/(.+)$'] = "$2";"fetch/video/$2";
以上都不起作用。
如果我http://localhost/app/en/fetch/video/asfasf
完美运作
这不是http://localhost/app/en/video/asfasf
我得到的错误是404:
404 Page Not Found
The page you requested was not found.
因此,出于某种原因,在我尝试做之前设置此$route['^(en|es|ro)/(.+)$'] = "$2";
是导致问题。
答案 0 :(得分:2)
对于任何使用该库并希望设置自定义路线的人来说,为了使他们能够工作,您必须按此顺序进行:
示例:
$route['default_controller'] = "home";
//First
$route['^(en|es|ro)/video/(.+)$'] = "fetch/video/$2";
$route['^(en|es|ro)/results$'] = "fetch/results$2";
//Second
$route['^(en|es|ro)/(.+)$'] = "$2";
$route['^(en|es|ro)$'] = $route['default_controller'];
$route['404_override'] = '';
答案 1 :(得分:1)
这种方式违背了控制器的目的,但是如果你知道任何带有“结果”作为第二段的东西都应该使用“fetch”控制器,你可以这样做:
$route['^(en|es|ro)/results$'] = "fetch/results";
修改强>
这是因为您的(:any)
行在正确的行之前捕捉到了。亦是 ”。” (点)字符也会匹配正斜杠,这可能不是你想要的。
$route['^(en|es|ro)/results$'] = "fetch/results";
$route['^(en|es|ro)/video/([^/]+)$'] = "fetch/video/$2";
$route['^(en|es|ro)/video/(:any)'] = "fetch/video/$1";