Php 如何使用Codeigniter重定向自定义404页面中的404错误?

Php 如何使用Codeigniter重定向自定义404页面中的404错误?,php,codeigniter,Php,Codeigniter,好心的先生们, 我正在使用Codeigniter建立一个博客。我可能需要一种将404错误重定向到自定义404页面的方法。就像Abduzeedo.com的404页面一样。是否可以通过使用路由来控制这一点?或者我应该使用控制器将其指向另一个视图?非常感谢 我使用另一种方法:重写Codeigniter的异常核心类。首先确保您的配置文件(system/application/config/config.php)子类前缀如下 $config['subclass_prefix']='MY_' 然后在syst

好心的先生们,
我正在使用Codeigniter建立一个博客。我可能需要一种将404错误重定向到自定义404页面的方法。就像Abduzeedo.com的404页面一样。是否可以通过使用路由来控制这一点?或者我应该使用控制器将其指向另一个视图?非常感谢

我使用另一种方法:重写Codeigniter的异常核心类。首先确保您的配置文件(system/application/config/config.php)子类前缀如下
$config['subclass_prefix']='MY_'

然后在system/application/libraries中创建一个名为MY_Exceptions.php的文件。然后在这里重写函数show_404()函数,如下所示

class MY_Exceptions extends CI_Exceptions{
    function MY_Exceptions(){
        parent::CI_Exceptions();
    }

    function show_404($page=''){    

        $this->config =& get_config();
        $base_url = $this->config['base_url'];

        $_SESSION['error_message'] = 'Error message';
        header("location: ".$base_url.'error.html');
        exit;
    }
}

现在,错误控制器将成为您的错误页面,该页面将被重定向到404错误。

要获得简单的解决方案,请转到“application/errors/”目录中的“Error_404.php”文件,并将以下代码放在该文件的开头:

header("Location:".base_url());

它会将404页面重定向到主页。

简单解决方案。

创建自定义错误或在视图中找不到页面

为错误页创建控制器。在index函数中,加载在上一步中创建的错误页面视图

现在,转到您的
应用程序/config/routes.php

您应该找到
$route['404\u override']=''

它的
表示调用默认错误页

现在将控制器名称放入错误页面

它会起作用的

假设我的错误页控制器是
'error'
。而查看页面是
“未找到”

因此,
Error.php
控制器的代码将是:

<?php
class Error extends CI_Controller
{
    function index()
        {
           $this->load->view('notfound'); 
        }

}

自定义404页面是使用以下3个步骤创建的

步骤1:首先在application/config中打开routes.php并设置自定义控制器名称

$route['404_override'] = 'my404'; //my404 is class name. 
步骤2:创建一个新控制器并在其中写入以下代码。代码很容易理解。所以我不打算在这里解释

    <?php 
class my404 extends CI_Controller 
{
    public function __construct() 
    {
        parent::__construct(); 
    } 

    public function index() 
    { 
        $this->output->set_status_header('404'); 
        $data['content'] = 'error_404'; // View name 
        $this->load->view('index',$data);//loading in my template 
    } 
    } 
    ?>


步骤3:使用自定义消息创建一个名为“error_404.php”的视图文件。

如果您想显示自定义404页面,那么当在网站中找不到页面时,您只需在位于
应用程序/error/error_404.php中的核心文件中替换自定义文件即可您可以通过使用
路由
和自定义控制器(自定义
404页面
)使用其他方法前往其他地方。但最短、最简单的方法是将核心文件替换为自定义
404错误页
文件

首先打开application/config文件夹中的routes.php并设置自定义控制器名称

 $route['404_override'] = 'custom404'; //custom404 is class name. 
创建一个新的控制器并在其中编写以下代码。代码很容易理解。所以我不打算在这里解释

<?php 
class custom404 extends CI_Controller 
{
public function __construct() 
{
    parent::__construct(); 
} 

public function index() 
{ 
    $this->output->set_status_header('404'); 
    $data['content'] = 'error_404'; // View name 
    $this->load->view('index',$data);//loading in my template 
} 
 } 
 ?> 

使用自定义消息创建名为“error_404.php”的视图文件。
这就是您需要做的所有事情,现在将有您的自定义404页面。

一个更简单的解决方案:

只需使用自定义404页面编辑
/application/views/error_404.php

无需创建任何控制器或修改代码,只需修改一个视图文件即可。只需将404页HTML放入
应用程序/views/errors/HTML/error_404.php
文件

如果要使用base_url()或任何其他CodeIgniter函数,请按照以下代码初始化CI_控制器类

<?php
  $ci = new CI_Controller();
  $ci =& get_instance();
  $ci->load->helper('url');
?>

无需定义任何复杂性。 这个过程非常简单。 首先,转到您的应用程序->配置->routes.php文件,并使用控制器的函数对此进行更改,您只需在其中加载页眉、页脚和404.php页面

$route['404_override'] = 'welcome/_404';
然后进入控制器页面

function _404(){
$this->load->view("header");
$this->load->view("404");
$this->load->view("footer");
}

这里也有同样的问题

这对我来说是最好的。我无法让404控制器工作,但这允许我访问我的模型和视图,并执行我需要的操作。谢谢。在CI 2.2中,您可以只编辑页面,但对于3.0,我们将按照您的定义(y)初始化CI_控制器