
当codeigniter提示“404 page not found”时,常见原因是默认控制器未正确定义入口方法(如index()),或路由未显式指向实际存在的控制器方法。本文将系统分析该问题,并提供可立即生效的修复方案。
当codeigniter提示“404 page not found”时,常见原因是默认控制器未正确定义入口方法(如index()),或路由未显式指向实际存在的控制器方法。本文将系统分析该问题,并提供可立即生效的修复方案。
在您提供的配置中,routes.php 将默认控制器设为 'Crud':
$route['default_controller'] = 'Crud';
根据 CodeIgniter 的路由规则,该配置等价于访问 Crud/index —— 即框架会自动尝试调用 Crud 控制器中的 index() 方法。但您的 Crud.php 中并未定义 index() 方法,仅实现了 savedata()。因此,当用户访问根路径(如 http://yourdomain.com/)时,CI 无法找到 Crud::index(),直接触发 404。
✅ 正确解决方案(二选一)
方案一:为 Crud 控制器添加 index() 方法(推荐)
这是最符合 MVC 规范的做法——让 index() 作为控制器的默认入口,例如用于展示首页或跳转表单:
// application/controllers/Crud.php
class Crud extends CI_Controller
{
public function __construct()
{
parent::__construct();
$this->load->database();
$this->load->model('Crud_model');
}
// ✅ 新增:默认入口方法
public function index()
{
// 可直接加载插入视图,或重定向到 savedata
$this->load->view('insert');
// 或:redirect('crud/savedata');
}
public function savedata()
{
$this->load->view('insert');
if ($this->input->post('save'))
{
$data = [
'first_name' => $this->input->post('first_name'),
'middle_name' => $this->input->post('middle_name'),
'last_name' => $this->input->post('last_name'),
'username' => $this->input->post('username'),
'password' => $this->input->post('password'),
'confirmpassword' => $this->input->post('confirmpassword'),
'birthday' => $this->input->post('birthday'),
'email' => $this->input->post('email'),
'contactnumber' => $this->input->post('contactnumber')
];
$response = $this->Crud_model->saverecords($data);
echo $response ? "Records Saved Successfully" : "Insert error !";
}
}
}
方案二:修改路由,直接指向 savedata 方法
若希望根 URL 直接执行保存逻辑(不推荐用于表单页,因存在重复提交风险),可更新路由:
// application/config/routes.php $route['default_controller'] = 'crud/savedata'; // 注意小写!CI 路由对大小写敏感 $route['404_override'] = ''; $route['translate_uri_dashes'] = FALSE;
⚠️ 关键注意事项:
- CodeIgniter 路由和 URL 中的控制器名默认为小写(即使类文件名为 Crud.php),因此路由中应写 'crud' 而非 'Crud';
- 表单 action 属性中使用 = base_url() ?>Crud/savedata 是可行的,但更规范的方式是使用 site_url() 辅助函数(需确保 url 辅助函数已加载):
- 建议在 Crud 构造函数中添加 $this->load->helper('url');,并在 config/autoload.php 中预加载 url 和 form 辅助函数,提升代码健壮性。
? 额外验证建议
- 确认 .htaccess 已启用 Apache mod_rewrite 并正确配置(根目录下):
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php/$1 [L] - 检查 config.php 中 index_page 是否为空(已满足)且 uri_protocol 设置为 'REQUEST_URI'(当前配置正确);
- 开启调试模式(ENVIRONMENT = 'development')并查看日志,确认是否因数据库连接失败等底层异常间接导致 404。
通过以上调整,即可彻底解决“404 Page Not Found”问题,同时使应用结构更清晰、可维护性更强。











