lunes, 5 de octubre de 2015

Reponder con el error 404 en php y redireccionar a otra página

Artículo muy interesante y bien explicado extraido de: http://www.desarrolloweb.com/faq/enviar-error-404-pagina-no-encontrada.html

Enviar error 404 de página no encontrada y luego redirigir con header location no funciona


Pregunta
Tengo un problema al enviar un error de página no encontrada, error 404.

Esto lo hago para las URLs que se procesan con htaccess con mod_rewrite. Pues puede haber páginas que htacces procese como que existen, pero que luego no existan en el sitio web. Espero que me explique. Por ejemplo, tengo esta página que no existe:
http://www.dominio.com/reportajes/loquesea_quenoexiste.html
Ese artículo no existe, entonces lo trato así:

header("HTTP/1.0 404 Not Found");
header ("location: /muestra_error.php");
Primero lanzo un error 404 con PHP en las cabeceras del http.
Luego redirecciono a una página que muestra el error.
Pero no me funciona correctamente, porque en realidad lo que estoy enviando por las cabeceras es un 302 Moved Temporarily.
Respuesta de Miguel Angel Alvarez

El problema de esto es que en realidad lo que se genera y se envía al navegador en las cabeceras del http es un estado de “movido temporalmente” (HTTP/1.x 302 OK) y no un código de error 404 de “página no encontrada”.
Esto pasa porque el header ("location: /error.php?cod=3"); sobrescribe el error 404 que se ha enviado anteriormente.
Por tanto, quiere decir que en realidad no estás enviando el error correctamente. El problema de esto no es por los visitantes del sitio, que van a ver que efectivamente no se ha podido encontrar el contenido que buscaban. El problema es para buscadores, que entenderán que una página que, en realidad no existe, ha sido movida temporalmente a una nueva URL. Así parece que tenemos URLs que en realidad no existen.
La manera de arreglarlo es no hacer la redirección header ("location: …"); después de generar el código de error 404.
Para ello simplemente puedes escribir en la página directamente la descripción del error. Si el código que describe un error lo tienes en otra página, pues simplemente incluye ese fichero con un include de PHP.

header("HTTP/1.0 404 Not Found");
header("Status: 404 Not Found");
include ("error.php");

Comentarios


Jose Antonio Nobile

17/8/2007
0 votos
O simplemente has la redireccion con javascript o un meta refresh, asi los buscadores veran que no se encontro la pagina, y los usuarios seran redireccionados a la pagina de Not Found


No hay comentarios:

Publicar un comentario

Jesús Moreno - Ingeniero Ténico Informático - consultor Informático

Hola, soy Jesús Moreno Ingeniero Técnico Informático en sistemas por la US y propietario de éste blog. Mi trabajo en los ultimos años se ...