You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在CodeIgniter模板中实现自定义404错误页面?

在CodeIgniter中实现模板化的自定义404错误页面

我明白你遇到的问题了——直接在MY_Exceptions里调用$this->load->view会报错,这是因为Exceptions类并没有继承CodeIgniter的Controller类,没法直接使用$this->load这个加载器。下面是一套完整的解决方案,帮你把404页面嵌入到现有模板里:

1. 正确扩展MY_Exceptions类

首先,在application/core/目录下创建或修改MY_Exceptions.php文件,重写show_404方法。我们需要通过get_instance()获取CodeIgniter的实例,这样就能正常使用视图加载器了:

<?php
class MY_Exceptions extends CI_Exceptions {

    public function show_404($page = '', $log_error = TRUE)
    {
        // 获取CodeIgniter核心实例,这是关键!
        $CI =& get_instance();

        // 定义404页面的标题和提示信息
        $heading = "404 Page Not Found";
        $message = "The page you requested was not found on our server.";

        // 如果传入了具体的页面路径,补充到提示信息里
        if (!empty($page)) {
            $message .= " Requested page: " . $page;
        }

        // 记录错误日志(默认开启,可根据需要关闭)
        if ($log_error) {
            log_message('error', $heading . ': ' . $page);
        }

        // 准备模板所需的数据:把404视图的内容转为字符串,传给模板的$content变量
        $data['content'] = $CI->load->view('error404', [
            'heading' => $heading,
            'message' => $message
        ], TRUE);

        // 加载你的全局模板,并传递数据
        $CI->load->view('pages/template.php', $data);

        // 终止程序执行,避免后续代码运行
        exit;
    }
}
?>

2. 调整模板和404视图的配合

确保你的模板文件pages/template.php里有一个用于渲染内容的占位符,比如:

<!DOCTYPE html>
<html>
<head>
    <title>My Website</title>
    <!-- 这里放你的全局CSS、JS等资源 -->
</head>
<body>
    <!-- 网站头部导航 -->
    <header>
        <nav>
            <!-- 你的导航链接 -->
        </nav>
    </header>

    <!-- 主要内容区域:这里会显示404页面的内容 -->
    <main>
        <?php echo $content; ?>
    </main>

    <!-- 网站底部 -->
    <footer>
        <!-- 底部版权信息等 -->
    </footer>
</body>
</html>

你的error404视图可以保持原来的样子,用来显示错误信息:

<h1><?php echo $heading;?></h1>
<p><?php echo $message; ?></p>

3. 检查配置项

打开application/config/config.php,确保子类前缀配置正确(默认就是MY_,如果没改过就不用动):

$config['subclass_prefix'] = 'MY_';

测试验证

现在访问一个不存在的页面,比如http://your-domain.com/non-existent-page,应该就能看到嵌入在你模板里的404错误页面了。

如果还是有问题,可以查看application/logs/目录下的错误日志,根据具体报错信息排查问题~

内容的提问来源于stack exchange,提问作者rashmi ag

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 07:04:35