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

时间:2010-02-22 09:59:07

标签: php codeigniter

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

9 个答案:

答案 0 :(得分:17)

我还有另一种方法:通过覆盖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错误。

答案 1 :(得分:8)

自定义 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步:创建一个名称为&#39; error_404.php &#39;的视图文件使用您的自定义消息。

答案 2 :(得分:2)

简单解决方案。

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

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

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

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

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

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

它会起作用。

假设我的Controller for error页面是'error'。和查看页面是'notfound'

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

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

}

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

答案 3 :(得分:2)

您不需要创建任何控制器或修改代码,而不是修改一个视图文件。只需将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');
?>

答案 4 :(得分:1)

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

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

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

答案 5 :(得分:1)

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

答案 6 :(得分:1)

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

答案 7 :(得分:0)

首先在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 
} 
 } 
 ?> 

创建一个名称为&#39; error_404.php&#39;的视图文件。使用您的自定义消息。 这就是您需要做的所有事情,并且现在将拥有您的自定义404页面。

答案 8 :(得分:0)

无需定义任何复杂性。 这个过程非常简单。 首先,转到您的应用程序 - &gt; config-&gt; routes.php文件,并使用您的控制器功能进行更改,您只需加载页眉,页脚和404.php页面。

<script>
  let counter1 = 0;
  let counter2 = 0;

  const firstFunct = ()=> {
    counter += parseInt(document.querySelector("#mySelect option:checked").value, 10);
    document.getElementById("mySelect").value = null; 
    document.getElementById("Group 1 score").innerHTML = counter;
    if (counter1 >= 54 || (counter1 >= 26 && counter2 === 0)) {
      document.body.innerHTML = "<p class='Group'>Group 1 Win</p><p onClick='location.reload()' class='Again'>Again</p>";
    }
  };  

  const secondFunct = ()=> {
    counter += parseInt(document.querySelector("#mySelect2 option:checked").value, 10);
    document.getElementById("mySelect2").value = null; 
    document.getElementById("Group 2 score").innerHTML = counter;
    if (counter2 >= 54 || (counter2 >= 26 && counter1 === 0)) {
      document.body.innerHTML = "<p class='Group'>Group 2 Win</p><p onClick='location.reload()' class='Again'>Again</p>";
      }
  }; 
</script>


<select id="mySelect" onchange="firstFunct()">
  <option value="" disabled selected style="display:none;">+</option>
  <option value="6" >6</option>
  <option value="7" >7</option>
  <option value="8" >8</option>
  <option value="12" >12</option>
  <option value="14" >14</option>
  <option value="16" >16</option>
  <option value="54">Win</option>
</select>

然后来到你的控制器页面

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

}

这里也有同样的问题 Display a view for 404 error in CodeIgniter