控制器文件名和类名必须严格匹配,如访问/hello需创建application/controllers/hello.php且定义class hello extends ci_controller;大小写错误、bom格式、路由配置不当或视图路径错误均会导致404。

控制器文件名和类名必须严格匹配 Hello
CodeIgniter 3 要求控制器文件名(不含扩展名)与其中定义的类名完全一致,且首字母大写。想访问 http://yoursite.com/hello,就必须创建 application/controllers/Hello.php,内容里必须是 class Hello extends CI_Controller。大小写错一个字母(比如 hello.php 或 class hello)都会导致 404 —— 这是新手最常卡住的地方。
实操建议:
-
application/controllers/Hello.php文件必须保存为 UTF-8 无 BOM 格式(Windows 记事本默认带 BOM,易引发空白输出错误) - 类名不能加下划线,不能用数字开头,不能和内置类(如
Home、Index)冲突 - 如果服务器启用了
mod_rewrite但没配好,可能误判为路径错误;先确认是否能正常访问http://yoursite.com/index.php/welcome(默认 welcome 控制器)
index() 方法是默认入口,不能少也不能拼错
CI3 不会自动调用任意方法,只有名为 index() 的 public 方法才能被 URL 直接触发(如 /hello)。写成 hello() 或 __construct() 都不会响应请求。
一个最小可用示例:
<?php defined('BASEPATH') OR exit('No direct script access allowed');
class Hello extends CI_Controller {
public function index()
{
echo 'Hello, CodeIgniter 3.1.13!';
}
}
注意:
- 必须有
defined('BASEPATH') OR exit(...)检查,否则直接访问 PHP 文件会暴露逻辑 -
echo是最简输出,不推荐长期使用;后续应改用$this->load->view() - 不要在
index()前加static,CI3 控制器方法必须是实例方法
URL 路由没生效?先检查 index_page 和重写规则
如果访问 /hello 报 404,但 /index.php/hello 可以,说明 Apache/Nginx 的 URL 重写未启用或配置有误。
排查步骤:
- 打开
application/config/config.php,确认$config['index_page'] = '';(空字符串,不是'index.php') - Apache 用户:确保
.htaccess文件存在且内容正确(CI3 官方包自带,路径为项目根目录),并开启AllowOverride All - Nginx 用户:需手动添加重写规则,不能只靠
.htaccess;典型规则是把所有非静态资源请求转发给index.php - Windows IIS 用户:需配置
web.config,规则与 Apache 不同,不可直接套用 .htaccess
加载视图时出现 Unable to load the requested file
一旦你把 echo 换成 $this->load->view('hello');,就涉及视图路径问题。CI3 默认从 application/views/ 下找文件,且不自动加 .php 后缀。
所以:
- 要创建
application/views/hello.php(小写,无驼峰) - 文件名不能带空格或特殊符号,如
hello world.php会失败 -
$this->load->view('hello')中的字符串是路径片段,支持子目录,如$this->load->view('pages/hello')对应application/views/pages/hello.php - 视图文件内可直接使用控制器中通过
$this->load->view('hello', $data)传入的变量,无需全局声明
index.php/welcome 能跑通,再逐项比对命名和路径。











