2014-11-17 5 views
1

Я уже создал 404 страницу ошибки, изменив маршрут в route.phpCodeignitor пользовательских 404 страница не найдена

$route['404_override'] = 'error_404/index'; 

где error_404 является контроллер и этот контроллер перенаправляет на мой взгляд страницу 40

<?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) изменение конфигурации $ конфигурации [ 'compress_output'] = FALSE

4) добавление ob_flush(); в system/core/Output.php

3 работает, но я не хочу менять $ config ['compress_output'] и не хочу вносить серьезные изменения в error_404.php, который по умолчанию переадресовывает CI. Любой другой выход? ..Пожалуйста, помогите

ответ

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() в любом другом контроллере, если я хочу показать, что конкретный ресурс недоступен.

+0

как я указать путь просмотра page..I 404 попытался изменить в $ CI-> load-> зрения ('ошибка/404'); но он не работает ... – user3631330

+0

, как и любой другой вид. скажем, у вас есть собственный пользовательский вид 404 в 'application/views/errors/404.php', то вы бы использовали: '$ CI-> load-> view ('errors/404');' – turntwo

+0

Когда я пытался отлаживать, я обнаружил, что он не вызывает сам класс My_Exception. что-либо, что нужно добавить ранее? – user3631330

0

Возможно, вам нужно установить заголовок!

public function index() 
{ 
    $this->output->set_status_header('404'); 
    $this->load->view('404.php');//loading in my template 
} 
+0

все еще для нескольких страниц Я получаю «ERR_CONTENT_DECODING_FAILED» – user3631330

+0

Я не знаю, как это неожиданно сработало. Но сейчас он работает. Спасибо за ваше время. –

1

Создать страницу 404 в CI

сделать ниже изменений в приложении/Config/routes.php

$route['404_override'] = 'my404'; 

Крит новое имя контроллера my404.php

<?php 
    class my404 extends CI_Controller 
    { 
     public function __construct() 
     { 
      parent::__construct(); 
     } 
     public function index() 
     { 
      $this->output->set_status_header('404'); 
      $data['content'] = 'error_404'; 
      $this->load->view('header'); 
      $this->load->view('errorpage',$data); 
      $this->load->view('footer'); 
     } 
     } 
?> 

Создать новый просмотр errorpage.php

<div class="main-content"> 
    <div class="eq-col"> 
     <div class="relative full-height"> 
     <div class="display-row"> 

      <!-- error wrapper --> 
      <div class="center-wrapper error-page" style="text-align:center"> 

       <div class="error-number"> 
       <span>404</span> 
       </div> 
       <div class="h5">PAGE NOT FOUND</div> 
       <p>Sorry, but the page you were trying to view does not exist.</p> 
       <P> <a style="cursor:pointer;color:blue" href="<?php echo base_url();?>">Click Here to go home page </a> </p> 

      </div> 
      <!-- /error wrapper --> 

     </div> 
     </div> 
    </div> 

    </div> 

to know more click here

Смежные вопросы