CodeIgniter自定义404页面需设置$route['404_override']指向控制器方法,该方法须手动设HTTP状态码为404并加载自定义视图,严禁重定向首页以免损害SEO。

1. 设置404重定向入口(必须)
打开 application/config/routes.php(注意不是 config.php),添加或修改这一行:
$route['404_override'] = 'Errors/page_not_found';
这里指定当 URL 无法匹配任何控制器/方法时,自动调用 Errors 控制器的 page_not_found 方法。控制器名和方法名可自定义,但需确保后续真实存在。
2. 创建处理控制器与方法
新建文件 application/controllers/Errors.php,内容如下:
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Errors extends CI_Controller {
public function page_not_found() {
$this->output->set_status_header(404);
$this->load->view('errors/custom_404');
}
}
注意两点:
• 必须手动设置 HTTP 状态码为 404(否则返回 200,影响 SEO);
• 视图路径 errors/custom_404 对应 application/views/errors/custom_404.php。
3. 设计自定义404视图
创建 application/views/errors/custom_404.php,可自由编写 HTML:
<h1>抱歉,页面找不到了</h1>
<p>您访问的地址可能已更改或不存在。</p>
<a href="= site_url() ?>">返回首页</a>
如果视图中用了 site_url() 或 base_url(),请确保在控制器中加载了 URL 辅助函数:
$this->load->helper('url');
4. 额外建议(提升体验)
• 若希望保留原始 URL 用于日志或分析,可在控制器中读取:
$this->uri->uri_string()
• 不要让 404 页面重定向到首页(如 redirect('/')),这会返回 302 + 200,搜索引擎会认为原链接有效,反而损害 SEO;
• 可在该方法中记录错误日志:
log_message('error', '404 Page not found: '.$this->uri->uri_string());


















