Versión 2.5 del Servidor HTTP Apache
Aunque el Servidor Apache HTTP ofrece respuestas de error genéricos en el caso de los códigos de estado 4xx o 5xx HTTP, éstas respuestas son bastante austeras, no informativas, y puede ser intimidante para los usuarios del sitio. Si lo desea, para proporcionar respuestas de error personalizados que son o bien más amables, o en algún idioma que no sea Inglés, o tal vez que son de un estilo más acorde con su diseño del sitio.
Respuestas de error personalizadas se pueden definir para cualquier código HTTP designado como condición de error - Esto es, cualquier estado 4xx ó 5xx.
Además, se proporcionan un conjunto de valores, de manera que el documento de error puede ser personalizado más adelante, basado en los valores de estas variables, usando Inclusiones del Lado del Servidor (SSI). O bien, puede tener condiciones de error que maneje un cgi, u otro controlador dinámico (PHP, mod_perl, etc), que hace uso de estas variables.
Los documentos de error personalizados se configuran
mediante la directiva ErrorDocument
,
que puede ser usado en el conjunto general, de los hosts virtuales o en directorios.
También pueden ser usados en los ficheros .htaccess si
AllowOverride
esta configurado a
FileInfo.
ErrorDocument 500 "Perdón, Nuestro escript ha fallado. ¡Ay Madre!"
ErrorDocument 500 /cgi-bin/crash-recover
ErrorDocument 500 http://error.example.com/server_error.html
ErrorDocument 404 /errors/not_found.html
ErrorDocument 401 /subscription/como_suscribirse.html
La sintaxis de la directiva de ErrorDocument
es:
ErrorDocument <código-de-3-dígitos> <acción>
Donde la acción será tratada como:
Cuando se redirija a una URL local, se establecen variables de entorno adicionales de manera que la respuesta puede ser personalizada. Éstas variables no se envían a URLs externas
Redireccionando a otra URL puede ser útil, pero sólo si algo de información puede ser pasado como parámetro, lo cuál puede ser usado para explicar de forma más clara el error o crear un log del mismo.
Para conseguir esto, cuando se envía el redireccionamiento de error, se establecerán variables de entorno adicionales, que será generado a partir de las cabeceras prestadas a la solicitud original, anteponiendo 'REDIRECT_' en el nombre de la cabecera original. Esto proporciona el documento de error en el ámbito de la petición original
Por ejemplo, es posible que se reciba, además de las variables de entorno más habituales, lo siguiente:
REDIRECT_HTTP_ACCEPT=*/*, image/gif, image/jpeg, image/png
REDIRECT_HTTP_USER_AGENT=Mozilla/5.0 Fedora/3.5.8-1.fc12 Firefox/3.5.8
REDIRECT_PATH=.:/bin:/usr/local/bin:/sbin
REDIRECT_QUERY_STRING=
REDIRECT_REMOTE_ADDR=121.345.78.123
REDIRECT_REMOTE_HOST=client.example.com
REDIRECT_SERVER_NAME=www.example.edu
REDIRECT_SERVER_PORT=80
REDIRECT_SERVER_SOFTWARE=Apache/2.2.15
REDIRECT_URL=/cgi-bin/buggy.pl
Las variables de entorno de tipo REDIRECT_
se crean a partir
de las variables de entorno que existían antes de la redirección. Se renombran
con prefijo REDIRECT_
, por ejemplo:,
HTTP_USER_AGENT
se convierte en
REDIRECT_HTTP_USER_AGENT
.
REDIRECT_URL
, REDIRECT_STATUS
, y
REDIRECT_QUERY_STRING
están garantizados para ser fijado, y
se establecerán las otras cabeceras solo si existían antes de
la condición de error.
Ninguna de estas condiciones se establecerá
si elobjetivo de ErrorDocument
es una
redirección external (nada a partir de un nombre de esquema
como http:
, incluso si se refiere a la misma máquina que el servidor.
Si apunta su ErrorDocument
a alguna variedad de controlador
dinámico como un documento que se incluye en el lado del servidor como CGI,
script u otro tipo de manejador, es posible que desee utilizar las variables
de entorno disponibles para personalizar esta respuesta.
Si el ErrorDocument especifica una redirección local a un script CGI, el
script debe incluir un campo de cabecera de tipo "Status:
" en
su salida con el fin de asegurar la propagación de
todo el camino de vuelta al cliente de la condición de error que se generó.
Por ejemplo, un script de Perl ErrorDocument podría incluir lo siguiente:
... print "Content-type: text/html\n";
printf "Status: %s Condition Intercepted\n", $ENV{"REDIRECT_STATUS"};
...
Si el script está dedicado al manejo de una condición de error en particular,
como por ejemplo 404 Not Found
, puede usar el propio
código y el error de texto en su lugar.
Tenga en cuenta que si la respuesta contiene Location:
header (con el fin de emitir una redirección del lado del cliente), el
script deberáemitir una cabecera apropiada con el Status:
(como 302 Found
). De lo contrario la cabecera
Location:
no tendrá ningún efecto.
Con la instalación de Apache HTTP Server se proporciona un directorio
personal con diferentes mensajes de errores traducidos a 16 idiomas
diferentes. También hay un archivo de configuración el el directorio
conf/extra
que puede ser incluido para añadir esta funcionalidad.
En el archivo de configuración del servidor, verá una línea como:
# Multi-language error messages
#Include conf/extra/httpd-multilang-errordoc.conf
Descomentando éste Include
habilitará esta característica,
y proporcionar mensajes de error de idioma-negociado,
basado en el idioma de preferencia establecido en el navegador del cliente.
Además, estos documentos contienen varias variables del tipo
REDIRECT_
, con lo que se le puede añadir información adicional
de lo que ha ocurrido al usuario final, y que pueden hacer ahora.
Estos documentos pueden ser personalizados de cualquier forma que desee mostrar más información al usuario a cerca del su sitio web, y que podrán encontrar en él.
mod_include
y mod_negotiation
Tienen que estar habilitados para usar estas características.