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