【问题标题】:codeigniter routing rules- what am I doing wrong?codeigniter 路由规则 - 我做错了什么?
【发布时间】:2012-03-03 16:16:21
【问题描述】:

请查看我的 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/,然后 admin/whatever/whatever/ 转到 admin/whatever/whatever/。可能有很多段,并且有太多无法列出单个规则(需要作为第一个 $route['(:any)'] = 'primary'; 规则的例外)。有没有办法做到这一点?

我对 codeigniter 还很陌生,所以如果答案非常明显,我深表歉意。过去几个小时我一直在四处寻找答案,但找不到任何答案。

【问题讨论】:

    标签: codeigniter url routing


    【解决方案1】:

    我是愚蠢的。规则应按优先级排序,我在登录和管理路由之前有一条包罗万象的路由 (: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';
    

    而且效果很好。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2013-08-21
        • 2019-02-15
        • 1970-01-01
        • 2014-10-14
        • 2016-04-23
        • 1970-01-01
        • 2015-10-18
        • 2011-06-01
        • 1970-01-01
        相关资源
        最近更新 更多