我已经通过更改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默认重定向到...还有其他出路吗?
答案 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
}