CodeIgniter 通过路由配置实现 URL 到控制器方法的映射,核心方式有两种:显式路由(在 app/Config/Routes.php 中用 $routes->get() 等方法精确绑定)和自动路由(启用 $autoRoute=true 后按约定匹配控制器与方法),均无需修改框架源码。

CodeIgniter 把 URL 指向某个控制器的某个方法,核心是通过路由配置实现映射。你不需要改框架源码或重写核心类,只需在路由文件中声明规则,系统就会自动把请求转发过去。
用显式路由(Defined Routes)精确控制
这是最常用、最推荐的方式,适用于需要明确语义、SEO 友好或前后台分离的场景。所有规则写在 app/Config/Routes.php 中,使用 $routes->get()、$routes->post() 等方法绑定 HTTP 动词:
-
$routes->get('about', 'Pages::view/about');→ 访问/about时调用Pages控制器的view()方法,并传入字符串'about'作为第一个参数 -
$routes->get('user/(:num)', 'Users::profile/$1');→/user/123映射到Users::profile(123),$1表示捕获的数字 -
$routes->post('api/login', 'Auth::login');→ 仅接受 POST 请求,指向登录方法
用自动路由(Auto-Routing)按约定快速匹配
适合 RESTful API 或大量相似结构的端点。启用后,URL 路径会直接对应控制器类名和方法名(不区分大小写,但类文件名小写,类定义首字母大写):
- 访问
/users/list→ 自动调用App\Controllers\Users::list() - 访问
/admin/dashboard→ 调用App\Controllers\Admin\Dashboard::index()(前提是控制器放在app/Controllers/Admin/Dashboard.php) - 需先开启:在
app/Config/Routing.php中设public bool $autoRoute = true;,并确认app/Config/Feature.php中$autoRoutesImproved = true;
注意控制器与方法的命名规范
无论用哪种路由方式,控制器类和方法必须符合框架要求,否则无法识别:
- 控制器类名必须首字母大写,如
class Users extends BaseController - 类文件名全小写,如
Users.php存为users.php - 方法名全部小写,如
public function profile(),不能叫Profile()或getProfile()(除非你手动路由指定) - 方法参数可设默认值,例如
public function view($slug = 'home'),这样访问/pages和/pages/contact都不会报错
补充:去掉 index.php 和处理 404
让 URL 更干净、体验更专业,还需两步:
- 配置 Web 服务器(如 Apache 的
.htaccess或 Nginx 的 rewrite 规则),隐藏index.php,使/products直接生效 - 在
Routes.php中设置$routes->set404Override('Errors::show404');,自定义 404 页面而不是显示白屏错误


















