【问题标题】:How can I redirect a 404 Error in a custom 404 page using Codeigniter?如何使用 Codeigniter 在自定义 404 页面中重定向 404 错误?
【发布时间】:2011-01-19 14:01:59
【问题描述】:

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

【问题讨论】:

    标签: php codeigniter


    【解决方案1】:

    我还使用了另一种方法:重写 Codeigniter 的 Exception 核心类。首先确保您的配置文件(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 错误。

    【讨论】:

      【解决方案2】:

      自定义404页面是通过以下3个步骤创建的,

      第一步:首先在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”的视图文件。

      【讨论】:

        【解决方案3】:

        您无需创建任何控制器或修改代码,而无需修改一个视图文件。刚刚将您的 404 页面 HTML 放入 application/views/errors/html/error_404.php 文件中。

        如果您想使用 base_url() 或任何其他 CodeIgniter 函数,请像下面的代码一样初始化 CI_Controller 类。

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

        【讨论】:

        • 这对我来说实际上是最好的。我无法让 404 控制器工作,但这让我可以访问我的模型和视图并做我需要的事情。谢谢。
        • 在 CI 2.2 中,您可以只编辑您的页面,但对于 3.0,我们按照您定义的方式初始化 ci_contoller (y)
        【解决方案4】:

        对于一个简单的解决方案,请转到“application/errors/”目录中的“error_404.php”文件,并将此代码放在文件开头:

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

        它将您的 404 页面重定向到主页。

        【讨论】:

          【解决方案5】:

          简单的解决方案。

          在视图中创建您的自定义错误或页面未找到页面。

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

          现在,转到您的application/config/routes.php

          你应该找到$route['404_override'] = '';

          '' 表示调用默认错误页面。

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

          它会起作用的。

          假设我的错误页面控制器是'error'。并且查看页面是'notfound'

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

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

          现在,我将 $route['404_override'] = ''; 替换为 $route['404_override'] = 'error'; in application/config/routes.php.

          【讨论】:

            【解决方案6】:

            好吧,您想在您的网站中找不到页面时显示您的自定义 404 页面,您只需在位于 application/error/error_404.php 的核心文件上替换您的自定义文件,只需在此处替换您的文件,您就可以去其他可以关注的地方使用routes 和自定义控制器为您自定义404 page 的其他方法。但最短最简单的方法是用自定义404error page文件替换核心文件

            【讨论】:

              【解决方案7】:

              首先打开 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 页面。

              【讨论】:

                【解决方案8】:

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

                $route['404_override'] = 'welcome/_404';
                

                然后来到你的控制器页面

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

                }

                同样的问题也可以在这里找到 Display a view for 404 error in CodeIgniter

                【讨论】:

                  【解决方案9】:

                  更简单的解决方案:
                  只需使用您的自定义 404 页面编辑/application/views/error_404.php :)

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 2015-08-01
                    • 1970-01-01
                    • 2018-04-18
                    • 1970-01-01
                    • 1970-01-01
                    • 2012-10-01
                    • 2016-04-25
                    • 2013-09-16
                    相关资源
                    最近更新 更多