Utilice la función _remap(). Esto le permite hacer algunas cosas muy poderosas con errores 404 más allá de lo que normalmente está incorporado - como
- ¡Diferentes mensajes 404 dependiendo de si el usuario está conectado o no!
- Registro extra de errores 404: ahora puede ver cuál era la persona que remitió al 404, lo que ayuda a rastrear los errores. Esto incluye ver si era un bot (como el bot de Google), o si era un usuario conectado, qué usuario causó el 404 (para que pueda comunicarse con ellos para obtener más información) o prohibirlos si intentan adivinar las rutas de administrador. o algo así)
- Ignore ciertos errores 404 (como un error precomposed.png para usuarios de iPhone).
- permiten que ciertos controladores para manejar su propia errores 404 diferentes si usted tiene una necesidad específica (es decir, permitir que un controlador de blog para redireccionar al último blog, por ejemplo)
¿Se extenderá todos los controladores de MY_Controller
:
class MY_Controller extends CI_Controller
{
// Remap the 404 error functions
public function _remap($method, $params = array())
{
// Check if the requested route exists
if (method_exists($this, $method))
{
// Method exists - so just continue as normal
return call_user_func_array(array($this, $method), $params);
}
//*** If you reach here you have a 404 error - do whatever you want! ***//
// Set status header to a 404 for SEO
$this->output->set_status_header('404');
// ignore 404 errors for -precomposed.png errors to save my logs and
// stop baby jesus crying
if (! (strpos($_SERVER['REQUEST_URI'], '-precomposed.png')))
{
// This custom 404 log error records as much information as possible
// about the 404. This gives us alot of information to help fix it in
// the future. You can change this as required for your needs
log_message('error', '404: ***METHOD: '.var_export($method, TRUE).' ***PARAMS: '.var_export($params, TRUE).' ***SERVER: '.var_export($_SERVER, TRUE).' ***SESSION: '.var_export($this->session->all_userdata(), TRUE));
}
// Check if user is logged in or not
if ($this->ion_auth->logged_in())
{
// Show 404 page for logged in users
$this->load->view('404_logged_in');
}
else
{
// Show 404 page for people not logged in
$this->load->view('404_normal');
}
}
Luego, en routes.php
establecer sus de 404 a su controlador principal, a una función que no existe - es decir
$route['404'] = "welcome/my_404";
$route['404_override'] = 'welcome/my_404';
pero hay NOmy_404()
en función de bienvenida - Esto significa que todos los de 404 pasarán a través de la función _remap
- por lo que lograr SECO y toda su lógica 404 en un solo lugar.
Depende de usted si utiliza show_404()
o solo redirect('my_404')
en su lógica.Si utiliza show_404()
- a continuación, basta con modificar la clase de excepciones para redirigir
class MY_Exceptions extends CI_Exceptions
{
function show_404($page = '', $log_error = TRUE)
{
redirect('my_404');
}
}
Duplicar posibles: http://stackoverflow.com/questions/8422033/codeigniter-2 -1-issue-with-show-404-and-404-override –