You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:29:52