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

时间:2012-03-03 16:16:22

标签: codeigniter url routing

请查看我的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进入管理员。这一切都很好。问题出在最后一条规则上,它似乎没有按预期工作; 'admin / whatever'只是被路由回我的主控制器。为什么呢?

我实际上想要正常路由任何管理员请求,因此 admin / whatever / 会转到 admin / whatever / admin / whatever / whatever / 转到 admin / whatever / whatever / 。可能存在许多细分,并且列出单个规则的次数太多(需要作为第一个 $ route ['(:any)'] ='primary'; 规则的例外情况。有没有办法做到这一点?

我对codeigniter很新,所以如果答案非常明显,请道歉。我花了最后几个小时来寻找答案,但找不到任何答案。

2 个答案:

答案 0 :(得分:2)

我是愚蠢的。规则应该按优先级顺序排序,我在登录和管理路由之前有一个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';

它工作正常。

答案 1 :(得分:0)

除非您想要将管理员/其他内容重写为其他内容,否则将删除最后一条规则和管理员/应该转到管理员/无论如何在管理员控制器中有任何功能