CodeIgniter首页路由由$route['default_controller']控制,本质是URI无分段时加载的控制器,必须是已存在、类名首字母大写的控制器(如'welcome'),对应welcome.php文件中的Welcome::index()方法;CI3不支持命名空间语法或斜杠后缀写法,且需确保Web服务器正确转发请求至index.php。

默认控制器怎么设
CodeIgniter 的首页路由本质是“没有 URI 段时该加载哪个控制器”,靠 $route['default_controller'] 控制,不是靠重写 URL 或 302 跳转。
它必须是一个已存在的控制器类名(首字母小写),可带方法名,但不能带参数或斜杠后缀。常见错误是写成 $route['default_controller'] = 'home/index'; 却没创建 Home 类,或写成 'Home::index'(CI3 不支持命名空间语法)。
- 正确写法(CI3):
$route['default_controller'] = 'welcome';→ 访问/时执行Welcome类的index()方法 - 若想指向其他方法,写成
$route['default_controller'] = 'pages/view/home';(前提是Pages类里有view()方法且接受$page参数) - 控制器文件名必须全小写(如
welcome.php),类名首字母大写(class Welcome extends CI_Controller),否则自动加载失败
为什么改了 default_controller 还跳不到页面
最常被忽略的是:CI3 默认开启 index_page,URL 里带 index.php 是正常行为;但如果你用 .htaccess 去掉了它,而 Apache/NGINX 没配好,请求根本没进 CI 入口,routes.php 根本不执行。
验证方式:直接访问 /index.php/welcome,如果能打开,说明路由配置生效;打不开则问题在 Web 服务器或 index.php 自身。
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
- 检查
application/config/config.php中$config['index_page']是否为空字符串('')或'index.php' - 确认
.htaccess文件存在且规则启用(Apache 需开mod_rewrite;NGINX 需配try_files $uri $uri/ /index.php?$query_string;) - 确保
base_url()和site_url()输出的路径与实际部署结构一致,否则静态资源或链接会 404
想让首页指向非 index() 方法怎么办
CI3 不允许在 $route['default_controller'] 里指定任意方法(比如 'user/dashboard'),但它支持“控制器/方法”格式,只要该方法存在且可被直接调用。
关键限制:目标方法不能依赖 URI 段传参(因为首页请求没有段),也不能强制要求 $id 这类参数——否则会报错或跳 404。
- 安全写法:在控制器中给参数设默认值,例如
public function dashboard($tab = 'overview') - 避免写
$route['default_controller'] = 'admin/login';同时又在login()里写if (!$this->input->post()) { show_404(); }——首页 GET 请求直接 404 - 如果逻辑复杂(比如需鉴权跳转),更推荐在
welcome控制器的index()里做判断,再用redirect()跳过去,而不是硬塞进 default_controller
CI4 的写法差异要注意
CI4 完全不用 $route['default_controller'],而是靠 app/Config/Routes.php 里的 $routes->get('/', 'Home::index'); 这类显式定义。
如果你在 CI3 项目里混用了 CI4 文档里的写法(比如 $routes->get('/', 'Home::dashboard');),会直接报错:函数 $routes 未定义。
- CI3:只认
application/config/routes.php,全局变量$route - CI4:路由对象由
RouteCollection管理,必须用$routes->get()、$routes->post()等方法注册 - 迁移时别漏掉命名空间声明,CI4 的控制器类必须带
namespace App\Controllers;
index.php、或者把 CI4 的路由写法复制进了 CI3 的 routes.php。先确认框架版本,再逐层验证请求是否真进到了路由层。


















