4

所以我正在使用Codeigniter 2.1 Internationalization i18n 库,我需要调整我的路由以在我删除控制器名称的短 url 中使用语言参数:

$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";在我试图做的是导致问题之前。

4

2 回答 2

2

对于使用该库并想要设置自定义路由的任何人,为了让它们工作,您必须按以下顺序进行操作:

  1. 自定义路线
  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']  = '';
于 2012-02-24T11:48:27.117 回答
2

这种方式违背了控制器的目的,但如果你知道任何以“结果”作为第二段的东西都应该使用“获取”控制器,你可以这样做:

$route['^(en|es|ro)/results$'] = "fetch/results";

编辑:

这是因为你的(:any)线路在正确的线路之前。也 ”。” (dot) 字符也将匹配正斜杠,这可能不是您想要的。

$route['^(en|es|ro)/results$']       = "fetch/results";
$route['^(en|es|ro)/video/([^/]+)$'] = "fetch/video/$2";
$route['^(en|es|ro)/video/(:any)']   = "fetch/video/$1";
于 2012-01-04T06:29:54.163 回答