Maestros del Web


Estás en Inicio / Editorial / PHP

13.05.2003

Personalizando página 404 de error con Php

Este artículo nos explicará como mostrar una página personalizada cuando un usuario llegue a un archivo inexistente en nuestro sitio.

404Muchas
veces, hemos visto como en algunos sitios cuando requerimos un archivo o pagina
no existente nos muestran una página personalizada de error, y no la típica
“404 documento no encontrado”. En este artículo, explicaré como hacerlo en
nuestros sitios y sacar provecho de esta personalización.

Introducción

Nota:

Nuestros
ejemplos estarán basados y aplicados sobre un servidor Apache, pero son perfectamente
extendibles a otros webservers. Además, los errores solos serán mostrados
en enlaces dentro del mismo sitio.

Para empezar tendremos que configurar el Apache para que cuando ocurra un
error 404 nos redirija a nuestro script. Para hacer esto modificamos el archivo
.htaccess agregándole o modificando la siguiente línea:

ErrorDocument 404 /path/mi404.php

En caso de que quieran aplicar esto para otros errores el formato es el siguiente:

ErrorDocument nroError path_al_archivo

Una vez configurado nuestro webserver, veamos que tenemos dentro de nuestro
script.

<html>
<head>
<title>Documento no encontrado</title>
</head>
<body>
El documento: <b><?=$_SERVER['REQUEST_URI'];?></b> o ha sidoencontrado en nuestro servidor.<br>
Por favor, bla, bla, bla.
<!–
Recordemos que IE no muestra las paginas de error salvo que sean mayores a 512 bytes
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
–>
</body>
</html>

Entre las variables que tenemos disponibles en apache
desde PHP esta $_SERVER['REQUEST_URI']
(o $HTTP_SERVER_VARS['REQUEST_URI']
en php 4.0.x y anteriores) la cual nos indica cual es la URL solicitada al
servidor. Por eso la utilizamos en nuestro script para indicar cual es el
documento o archivo no encontrado.

Algo un poco más funcional

Ahora bien, el ejemplo anterior es bastante sencillo y realmente poco útil
para el administrador del sitio, ya que únicamente informa al navegante de
cual es el documento faltante.

Algo mas útil seria que cuando no se encuentra
un documento se le informe de alguna manera al administrador para que tome
conocimiento inmediatamente, ya sea de algún enlace roto o intento de acceso
a archivos no permitidos.

Para avisarle al webmaster del sitio lo haremos mediante el envío de un correo
electrónico a través de la función mail();

Veamos como quedaría nuestro script:

<html>
<head>
<title>Documento no encontrado</title>
</head>
<body>
El documento: <b><?=$_SERVER['REQUEST_URI'];?></b>
no ha sido encontrado en nuestro servidor.<br>
El error ha sido comunicado al administrador del sitio. Disculpe las molestias
ocasionadas.

<?
//Indicamos la fecha y hora del suceso.
$fecha = date(’d-m-Y H:i:s’);
$para=’webmaster@misitio.com’;
$asunto=’Documento no encontrado.’;
$mensaje=’El documento: ‘ . $_SERVER['REQUEST_URI'] . ‘ no ha sido encontrado en el sitio: ‘ .$_SERVER['SERVER_NAME']. ‘ al tratar de ser accedido el ‘ . $fecha . ‘ desde la dirección ‘ . $_SERVER['HTTP_REFERER'];

mail($para, $asunto, $mensaje);
?>
<!–
Todo sea por el IE
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx –>
</body>
</html>

Ahora, además del documento le indicamos el sitio,
la fecha y la hora del error, además de la dirección desde la cual
se trato de acceder, esto es util para chequear que los enlaces desde otras
páginas externas a nuestro sitio, estén referenciando documentos existentes
y por ende comunicarles del cambio.

Conclusión

Con esta breve introducción, podrán empezar
a personalizar sus mensajes de errores y aprovecharlos para facilitar la administración
de su sitio, conociendo al instante que links están caídos dentro del sitio.
Ahora, solo resta experimentar y encontrar que datos podemos obtener y cuales
son los que nos interesan.

Califica esta nota:

1 estrella2 estrellas3 estrellas4 estrellas5 estrellas (3 votos, promedio: 5 de 5)
Loading ... Loading ...

Sobre el autor

Juan Pablo Winiarczyk
Colaborador de zonaphp.com y del foro PHP en forosdelweb.com

Si eres nuevo en Maestros del Web y te agradan nuestras publicaciones, te invitamos a suscribirte a nuestro Feed.

Sindícanos en: Google Reader, Bloglines, My Yahoo o My MSN | ¿Qué es el Feed?

Comentarios

21 comentarios en total.

  1. lopeareas 01.06.2003 - 00:06 - #

    Esta pagina ayuda a todos los Ignorantes que solo sabemos teclear, a conocer como evitar cometer errores y perseverar en segurida el equipo,los maestrso de la Web es muy importante para orientar en nuestro pio lenguaje

  2. Pamela 11.06.2003 - 10:25 - #

    Me parece una gran solución.

  3. jhony192 18.06.2003 - 17:24 - #

    me gusta es un gran script.
    no creo poder explicarlo mejor que el por eso lo felicito

  4. Jorge Urquiaga 23.06.2003 - 14:12 - #

    Simple y muy útil

  5. Unregistered 05.07.2003 - 13:04 - #

    Un problema Windows no mw permite crear archivos ue empiecen por .

  6. roc2107 07.07.2003 - 12:42 - #

    Que buana información, siempre se aprende algo nuevo, y esto es muy practico.

  7. Pablo Jeffs 07.08.2003 - 08:49 - #

    Muy bueno, pero en mi caso no muestra la página no encontrada si no que siempre muestra error404.php (en pantalla y en el correo)

    ¿Que pude hacer mal? webmaster@fototrekking.cl

  8. TM3X 02.09.2003 - 10:14 - #

    Muy facil de aprender a personalizar una página 404, esto era lo que buscaba

  9. Unregistered 06.10.2003 - 11:43 - #

    necsito ayuda estoy creando un foro en php y me genera el siguiente herror no sepor que porq todo esta bien hecho espero me ayuden Please ensure both the install/ and contrib/ directories are deleted

  10. nemi 11.11.2003 - 12:59 - #

    como si puede pone la extencion swf en apache
    nemi@nemiwebsite.com

  11. cr 27.12.2003 - 00:12 - #

    en la instalación de mi apache no se creo el archivo .htaccess (instalación en windows), por lo que no se que hacer

  12. Juan Pablo Reynal 12.01.2004 - 13:25 - #

    Es interesante destacar otra funcionalidad para el manejo de errores: redireccionar al usuario a una pagina mas apropiada a los efectos de lo que estaba requiriendo. Por ejemplo, podemos explotar la URL, retener los datos del nombre del archivo (si es descriptivo) o las variables de la URL y ejecutar una consulta en nuestro buscador interno:
    $url = explode(”/”, $_SERVER['REQUEST_URI']); //tambien podriamos usar $QUERY_STRING;
    $palabras = trim(str_replace(array(’.php’, ‘_’,'-’,’.htm’), ”, $url[3]));
    print Header(”Location: http://www.misitio.com/buscador.php?terminos=palabras“);

  13. bichomen 22.02.2004 - 09:13 - #

    Hola, a mi no me funciona, e seguido bien los pasos, pero no me encuentra el error404, por cierto las rutas en .htaccess son absolutas?, los errores se han de guardar en raiz “/”? se ha de modificar el httpd.conf, que permisos tiene q tener el .htaccess y los archivos de los errores, varias dudas sin resolver, poca información e encontrado por internet

    bichomen

  14. N4x0 30.03.2004 - 10:45 - #

    Hola, qisiera saber donde y cual es el archivo .htacces, tengo el php-nuke instalado, y viene cn 1 montn. Me gustaria q me contestaran

  15. CaCko2 15.06.2004 - 10:42 - #

    en mi blog hice una pequeña guia acerca de este tema, esta bien interezante, facil y practica.
    el link directo es :
    http://www.superlapiz.com/cristian/archives/2004/06/15/tips/
    y el link al blog es
    http://www.cacko.tk

    realmente les puede servir

  16. carceron 19.08.2005 - 13:46 - #

    HIce todo al pie de la letra y cuando ingreso una direccion de un archivo que no existe me sale ademas del error normal lo siguiente:

    Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.

    Que puede estar pasando ?

  17. No Registrado 01.05.2006 - 15:19 - #

    Pablo Jeffs, Muy bueno, pero en mi caso no muestra la página no encontrada si no que siempre muestra error404.php (en pantalla y en el correo)

    ¿Que pude hacer mal? webmaster@fototrekking.cl

  18. Cruppo 15.07.2006 - 12:33 - #

    con la funcion touch creo que se puede crear el .htaccess

    touch(”.htaccess”);

    // http://www.tomatone.net/ //

  19. Adam 20.12.2006 - 17:23 - #

    Muchas gracias Juan Pablo, no entendia pq Firefox si que mostraba el mensaje y IE no, no sabia que “IE no muestra las paginas de error salvo que sean mayores a 512 bytes “.

  20. Mondoxibaro 19.11.2007 - 19:19 - #

    Muy interesante la solución aportada por Juan Pablo Reynal, la he intentado probar, pero no sé donde está el fallo (soy novato en PHP)

  21. Posicionamiento valencia 24.01.2008 - 06:46 - #

    Faltaría colocar en la cabecera que se trata de un error y no de una página normal:
    header(”HTTP/1.0 404 Not Found”);

Deja tu Comentario


Maestros del Web se reserva el derecho de moderación de los comentarios. Evita utilizar palabras soeces, ataques directos, descalificativos, insultos, de lo contrario tu comentario será eliminado.


Boletín

Agrega nuestro feed a  Netvibes
wikio Add to Technorati Favorites

-


Maestros del Web es el punto de encuentro para los entusiastas de la red.

Creative Commons by-nc-sa 3.0 | Política de Privacidad | CMS: Wordpress