未找到Codeigniter自定义404页面

时间:2014-11-17 18:01:03

标签: codeigniter custom-error-pages

我已经通过更改route.php

中的路径创建了自定义404错误页面
$route['404_override'] = 'error_404/index';

其中error_404是控制器,此控制器重定向到我的自定义404视图页

<?php
ob_start();
class error_404 extends Front_Controller {

    function __construct()
    {
        parent::__construct();

        //make sure we're not always behind ssl
        remove_ssl();
    }

    function index()
    {   
        $this->load->view('404.php', '');
    }
}

在少数情况下,它不会加载404错误页面并在这些页面中引发“内容编码错误”。  我在这个门户网站上搜索了以下选项

1)在我的库中创建文件名MY_Exceptions并使用CI_Exceptions扩展它

2)通过添加标题功能

将error_404.php重定向到我的自定义页面

3)更改config $ config ['compress_output'] = FALSE

4)添加ob_flush();在system / core / Output.php

2&amp; 3有效,但我不想更改$ config ['compress_output'],也不想在error_404.php中进行重大更改,CI默认重定向到...还有其他出路吗?

2 个答案:

答案 0 :(得分:4)

如何在MY_Exception中渲染页面。我不确定这是否适合你,但它总是适合我,

$route['404_override'] = 'error_404/index';

在控制器中:

<?php

class error_404 extends CI_Controller {

    function __construct()
    {
        parent::__construct();
    }

    function index()
    {   
        show_404();
    }
}

应用/核心/ MY_Exceptions

<?php

class MY_Exceptions extends CI_Exceptions {

    /**
     * render the 404 page
     *
     */
    public function show_404($page = "", $doLogError = TRUE)
    {
        include APPPATH . 'config/routes.php';

        if($page === ""){
            $page = $_SERVER['REQUEST_URI'];
        }

        if ($doLogError){
            log_message('error', '404 Page Not Found --> '.$page);
        }

        if(!empty($route['404_override']) ){
            $CI =& get_instance();
            $CI->load->view('error/404');
            echo $CI->output->get_output();
            exit;
        } 
        else {
            $heading = "404 Page Not Found";
            $message = "The page you requested was not found.";
            echo $this->show_error($heading, $message, 'error_404', 404);
            exit;
        }
    }

} 

这样,如果我想显示特定资源不可用,我可以在任何其他控制器中调用show_404()

答案 1 :(得分:0)

可能你需要设置标题!

public function index()
{
    $this->output->set_status_header('404');
    $this->load->view('404.php');//loading in my template
}