CodeIgniter 404 页面覆盖需设置 $route['404_override'] 指向自定义控制器方法,如 'errors/page_not_found',并确保 Errors 控制器中定义 public 方法,加载对应视图或重定向;注意加载 url 辅助函数、.htaccess 重写规则及路由顺序。

CodeIgniter 配置 404 覆盖页面,核心是设置 $route['404_override'],让它指向你自定义的控制器方法,而不是显示默认的白屏错误页。
在 routes.php 中设置覆盖规则
打开 application/config/routes.php,在路由数组中添加一行:
-
$route['404_override'] = 'errors/page_not_found';—— 表示所有未匹配的请求都交给Errors控制器的page_not_found()方法处理 - 也可以写成
$route['404_override'] = 'home/index';,直接重定向到首页(需确保 home 控制器存在且 index 方法可访问) - 留空或注释掉这行,则使用 CodeIgniter 自带的 404 页面(
application/views/errors/html/error_404.php)
创建对应的控制器和方法
比如你设的是 errors/page_not_found,就要新建或编辑 application/controllers/Errors.php:
- 确保类名首字母大写:
class Errors extends CI_Controller - 方法必须是 public:
public function page_not_found() - 可以在方法里加载自定义视图:
$this->load->view('errors/custom_404'); - 如果想跳转到首页:
redirect('/', 'refresh');(需加载 url 辅助函数)
注意几个关键点
避免常见报错和失效情况:
- 确保
url辅助函数已加载,否则base_url()或redirect()会报错;可在构造函数中加$this->load->helper('url'); - 不要在 404 处理方法里调用未加载的辅助函数或类库,否则可能触发 PHP Fatal Error
- 若启用了 .htaccess 重写(隐藏 index.php),要确认重写规则正确,否则 404 覆盖可能根本没机会执行
- 路由规则顺序很重要:更具体的路由必须写在
$route['404_override']前面,否则会被提前匹配而绕过 404 处理
配置完成之后,访问一个不存在的 URL(如 /nonexistent/page),就会进入你指定的方法,不再显示原始的“404 Page Not Found”白页。


















