能,但必须配路由规则且不能依赖默认控制器自动加载视图;CodeIgniter 不扫描视图文件,所有 URL 都需通过 $route 显式映射,否则直接访问如 /about 会因找不到控制器而 404。

能,但必须配路由规则,且不能依赖默认控制器自动加载视图。 CodeIgniter 不会因为存在 views/pages/about.php 就自动响应 /about —— 它压根不扫描视图文件,所有 URL 都得靠 $route 显式映射过去。
为什么直接访问视图路径会 404
CodeIgniter 的请求生命周期里,index.php 入口只解析 URI、匹配路由、实例化控制器、调用方法。它根本不会“看到”视图文件是否存在,更不会把 /about 自动转成 pages/view 这种逻辑——除非你写好路由规则并指定控制器来兜底。
- 没配路由时,
/about会被当成控制器名,CI 尝试加载About类,找不到就 404 - 即使你建了
Pages控制器,没在routes.php里写$route['about'] = 'pages/view';,它也不会触发 -
pages/view方法本身也得手动加载视图:$this->view('pages/about');,不是自动的
最简静态页路由配置(含参数)
假设你要支持 /about、/contact、/privacy 这类页面,且视图文件放在 views/pages/ 下:
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
// application/config/routes.php $route['about'] = 'pages/view/about'; $route['contact'] = 'pages/view/contact'; $route['privacy'] = 'pages/view/privacy'; $route['pages/(:any)'] = 'pages/view/$1'; // 可选:统一处理 pages/xxx 路径
对应控制器 Pages 的 view() 方法只需做一件事:安全地加载视图文件。
- 检查
$page参数是否合法(比如只允许字母数字和下划线) - 用
file_exists()判断APPPATH . 'views/pages/' . $page . '.php'是否存在 - 不存在就调用
show_404(),别让 CI 自己报错或空白响应
容易踩的坑:默认控制器和 view() 方法的陷阱
很多人以为设了 $route['default_controller'] = 'pages'; 就能访问 / 显示首页,结果报错或空白——问题出在 Pages 控制器的 index() 方法没写,或者写了但没调用 $this->view()。
-
index()方法必须显式加载视图,比如$this->view('pages/home'); - 如果想让
/直接映射到某个静态页,更稳妥的是:$route['default_controller'] = 'pages/view/home'; - 别在
view()方法里漏掉$this->load->view()或$this->view()(CI4 是后者),CI 不会自动渲染同名视图 - CI4 中若用了模板引擎(如
Views\Renderer),确保没启用全局 layout 干扰纯静态页输出
静态页看着简单,但 CI 的路由和控制器耦合度高,绕不开手动映射和文件存在性校验。最易忽略的是:没加 file_exists() 检查就直接传参进 $this->view(),导致用户访问不存在的页面时抛出 PHP Warning 而不是友好 404。


















