CodeIgniter路由问题:Project控制器带(:any)规则无法工作求助
解决CodeIgniter中Project控制器路由失效的问题
嘿,你这明显是踩了CodeIgniter路由的匹配顺序坑啦!我来给你拆解问题和解决方案:
问题根源
CodeIgniter的路由规则是从上到下依次匹配的,一旦匹配到第一条符合的规则就会停止往下查找。你现在把那些带(:any)的通用路由放在了project相关路由的前面,当用户访问project/xxx时,系统会先命中$route['(:any)/(:any)']这条规则,把请求转到home/project/project(而且你这里还写错了,用了两次$1,应该是$1/$2才对),完全轮不到后面的project/(:any)规则生效。
另外顺便提一句:你那些通用路由里的参数重复用$1是错误的,比如$route['(:any)/(:any)'] = "home/$1/$1";,这样不管URL里的第二个参数是什么,都会被替换成第一个参数的值,这肯定不是你想要的效果,得改成$1/$2、$1/$2/$3这样对应不同的占位符。
修正后的路由代码
把具体的路由规则放在通用通配符规则的前面,同时修正参数错误,完整代码如下:
$route['default_controller'] = 'home'; $route['404_override'] = 'home'; $route['translate_uri_dashes'] = FALSE; // 先定义具体的项目路由,确保优先匹配 $route['project'] = "project"; $route['project/(:any)'] = 'project/$1'; // 如果需要支持project下更多层级(比如project/xxx/yyy),可以继续添加: // $route['project/(:any)/(:any)'] = 'project/$1/$2'; // 再定义通用的通配符路由,处理其他所有未匹配的URL $route['(:any)'] = "home/$1"; $route['(:any)/(:any)'] = "home/$1/$2"; $route['(:any)/(:any)/(:any)'] = "home/$1/$2/$3"; $route['(:any)/(:any)/(:any)/(:any)'] = "home/$1/$2/$3/$4"; $route['(:any)/(:any)/(:any)/(:any)/(:any)'] = "home/$1/$2/$3/$4/$5";
为什么这样有效?
调整顺序后,当用户访问project或者project/xxx时,系统会优先匹配前面的具体规则,正确路由到Project控制器;而其他所有未被具体规则匹配的URL,才会走后面的通配符规则,转到Home控制器处理。
内容的提问来源于stack exchange,提问作者Uthaya
相关产品推荐
相关产品推荐

