Páginas de errores personalizadas

Generalidades

Las páginas de error personalizadas te permiten personalizar las páginas que se muestran cuando ocurre un error. No solo hacen que tu sitio web sea más profesional, sino que también pueden evitar que pierdas visitas a tu sitio. Si un visitante ve una página de error genérico, es probable que abandone tu sitio. Sin embargo, si ven una página de error útil, es posible que continúen allí porque simplemente pueden hacer clic en un enlace para ir a otra página dentro de tu sitio.

Las siguientes instrucciones son para un servidor Apache. Si estás ejecutando Nginx, ve a la sección en la parte inferior titulada Creando páginas de error personalizadas con Nginx.

Una anotación sobre los errores 500

Debido a cómo está configurado Apache, no es posible redirigir a una página de error 500 personalizada. Cuando se encuentra un error 500, se mostrará la página 500 predeterminada del navegador.

Configuración simple

Para crear una página de error personalizada para tu dominio, agrega la siguiente línea a un archivo .htaccess ubicado en el directorio web de tu dominio:

ErrorDocument 404 /error.php

Esto redirige los navegadores que experimentan un error 404 (No encontrado) al archivo error.php ubicado en el mismo directorio que tu archivo .htaccess. Alternativamente, puedes usar la línea anterior como plantilla para crear páginas de error personalizadas separadas para cada error.

Códigos de estado

La lista completa (y muy larga) de errores está disponible aquí:

Algunos de los errores más comunes por los que probablemente querrá realizar entradas son:

  • 400 – Bad Request
  • 401 – Unauthorized
  • 403 – Forbidden
  • 404 – Not Found

Por ejemplo, para detectar esos errores, agregarías lo siguiente a tu archivo .htaccess para el dominio que deseas configurar:

ErrorDocument 400 /error.php
ErrorDocument 401 /error.php
ErrorDocument 403 /error.php
ErrorDocument 404 /error.php

Esto obliga al navegador a redirigir al archivo /error.php si encuentra alguno de los códigos de estado anteriores.

Configurando el archivo error.php

A continuación, en error.php, agrega algo similar a lo siguiente. Este ejemplo en particular está hecho para un sitio wiki: si alguien visita http://www.example.com/Foo, se le redirige a http://www.example.com/wiki/Foo. Se supone que todo lo que aparece después de la última "/" es un artículo wiki al que están intentando acceder:

<?php

$page_redirected_from = $_SERVER['REQUEST_URI'];  // this is especially useful with error 404 to indicate the missing page.
$server_url = "http://" . $_SERVER["SERVER_NAME"] . "/";
$redirect_url = $_SERVER["REDIRECT_URL"];
$redirect_url_array = parse_url($redirect_url);
$end_of_path = strrchr($redirect_url_array["path"], "/");

switch(getenv("REDIRECT_STATUS"))
{
	# "400 - Bad Request"
	case 400:
	$error_code = "400 - Bad Request";
	$explanation = "The syntax of the URL submitted by your browser could not be understood. Please verify the address and try again.";
	$redirect_to = "";
	break;

	# "401 - Unauthorized"
	case 401:
	$error_code = "401 - Unauthorized";
	$explanation = "This section requires a password or is otherwise protected. If you feel you have reached this page in error, please return to the login page and try again, or contact the webmaster if you continue to have problems.";
	$redirect_to = "";
	break;

	# "403 - Forbidden"
	case 403:
	$error_code = "403 - Forbidden";
	$explanation = "This section requires a password or is otherwise protected. If you feel you have reached this page in error, please return to the login page and try again, or contact the webmaster if you continue to have problems.";
	$redirect_to = "";
	break;

	# "404 - Not Found"
	case 404:
	$error_code = "404 - Not Found";
	$explanation = "The requested resource '" . $page_redirected_from . "' could not be found on this server. Please verify the address and try again.";
	$redirect_to = $server_url . "wiki" . $end_of_path;
	break;
}
?>

<!DOCTYPE html> <head> <link rel="Shortcut Icon" href="/favicon.ico" type="image/x-icon" /> <?php if ($redirect_to != "") { ?> <meta http-equiv="Refresh" content="5; url='<?php print($redirect_to); ?>'"> <?php } ?> <title>Page not found: <?php print ($redirect_to); ?></title> </head> <body> <h1>Error Code <?php print ($error_code); ?></h1> <p>The <a href="http://en.wikipedia.org/wiki/Uniform_resource_locator">URL</a> you requested was not found. <?PHP echo($explanation); ?></p> <p><strong>Did you mean to type <a href="<?php print ($redirect_to); ?>"><?php print ($redirect_to); ?></a>?</strong> You will be automatically redirected there in five seconds.</p> <p>You may also want to try starting from the home page: <a href="<?php print ($server_url); ?>"><?php print ($server_url); ?></a></p> <hr /> <p><i>A project of <a href="<?php print ($server_url); ?>"><?php print ($server_url); ?></a>.</i></p> </body> </html>

Diseña la página para que se adapte al resto de tu sitio y habrás terminado con el manejo básico de errores.

Creando páginas de error personalizadas con Nginx

También puedes crear páginas de error personalizadas si estás ejecutando Nginx en lugar de Apache.

  1. Primero, ve el siguiente artículo para comprender dónde deben ir tus archivos de configuración:
  2. Crea un archivo llamado error.conf en el siguiente directorio:
    /home/username/nginx/example.com/error.conf
    Esto asume que tu nombre de usuario es 'username' y que tu sitio es 'example.com'.
  3. En el archivo error.conf, añade lo siguiente:
    error_page 404 /404.html;
    location  /404.html {
      internal;
    }
  4. Seguido, navega al directorio de tu sitio. Por ejemplo:
    /home/username/example.com
  5. En ese directorio, crea una página titulada 404.html con cualquier mensaje de error que desees mostrar.
  6. Reinicia tu servidor (si estás en un VPS). Si estás en Dedicated, puedes recargar Nginx tu mismo.
  7. Si ahora visitas una página de tu sitio que no existe, se mostrará tu página de error personalizada.

Ver también

¿Este artículo ha respondido sus preguntas?

Última actualización el PST.

¿Aún no encuentra lo que busca?