codeigniter路由规则-我做错了什么?

codeigniter路由规则-我做错了什么?,codeigniter,url,routing,Codeigniter,Url,Routing,请查看我的codeigniter config/routes.php文件中的内容: $route['default_controller'] = "primary"; $route['404_override'] = ''; $route['(:any)'] = 'primary'; $route['login'] = 'login'; $route['admin'] = "admin"; $route['

请查看我的codeigniter config/routes.php文件中的内容:

$route['default_controller'] = "primary";
$route['404_override']    = '';

$route['(:any)']              = 'primary';
$route['login']               = 'login';
$route['admin']               = "admin";
$route['admin/(:any)']    = 'admin/$1';
因此,我希望几乎所有页面请求都被定向到我的“主”控制器,在那里它将由那里的index()函数处理。有一些例外;登录转到登录,管理员转到管理员。一切都很好。问题在于最后一条规则,它似乎没有发挥应有的作用“管理员/无论什么”只是被路由回我的主控制器。为什么?

实际上,我希望正常路由任何管理员请求,因此admin/whatever/转到admin/whatever/,而admin/whatever/whatever/转到admin/whatever/。可能有许多段,并且有太多的段无法列出单个规则(需要作为第一个$route['(:any)]='primary';规则的例外)。有办法做到这一点吗


我是codeigniter的新手,所以如果答案显而易见,我会道歉。我花了几个小时到处寻找答案,但找不到任何答案。

除非你想将admin/whatever重写为其他内容,否则删除最后一条规则,admin/whatever应该转到admin/whatever,如果你在admin controller中有函数whatever,我就太傻了。规则应该按优先级排序,在登录和管理路由之前,我有一个catchall路由(:any),因此该路由始终转到主控制器,并且从未到达我的其他路由,因为这是首先匹配的

路由也应按段数排序,因此“admin/(:any)”应位于“admin”之前。在规则“admin/(:any)”中,(:any)似乎可以引用任意数量的后续段

我现在有:

$route['admin/(:any)']          = 'admin/$1';
$route['login/(:any)']          = 'login/$1';
$route['login']                     = 'login';
$route['admin']                     = "admin";
$route['(:any)']                    = 'primary';
而且效果很好