Páginas de errores personalizadas
Apache ofrece la posibilidad de que los administradores puedan configurar las respuestas que muestra el servidor Apache cuando se producen algunos errores o problemas. Se puede hacer que el servidor siga uno de los siguientes comportamientos:
- Desplegar un texto diferente, en lugar de los mensajes que aparecen por defecto.
- Redireccionar la petición a una URL local.
- Redireccionar la petición a una URL externa.
La directiva ErrorDocument
me permite configurar la página de error personalizada para cada tipo de error (código de estados). Por ejemplo:
ErrorDocument 403 "Sorry can't allow you access today"
ErrorDocument 404 /error/404.html
ErrorDocument 500 http://www.pagina2.org/error.html
La directiva ErrorDocument
la podemos usar en diferentes ámbitos de nuestra configuración, por ejemplo si la ponemos dentro de un Host Virtual la páginas de errores personalizadas se verán sólo en ese host virtual.
Si queremos configurar las páginas de error personalizadas podemos hacerlo en un fichero de configuración: /etc/apache2/conf-available/localized-error-pages.conf
. Este fichero de configuración está activo, podemos ver el enlace simbólico que existe en el directorio /etc/apache2/conf-enabled
.
Cambiando el idioma de las páginas de error personalizadas
En el directorio /usr/share/apache2/error
nos encontramos fichero tipo mapa donde se encuentra definida las páginas de error personalizadas para distintos idiomas. Por negociación de contenidos podemos activar la funcionalidad de que sirva la versión adecuada, para ello debemos descomentar en el fichero /etc/apache2/conf-available/localized-error-pages.conf
el siguiente bloque:
<IfModule mod_negotiation.c>
<IfModule mod_include.c>
<IfModule mod_alias.c>
Alias /error/ "/usr/share/apache2/error/"
<Directory "/usr/share/apache2/error">
Options IncludesNoExec
AddOutputFilter Includes html
AddHandler type-map var
Order allow,deny
Allow from all
LanguagePriority en cs de es fr it nl sv pt-br ro
ForceLanguagePriority Prefer Fallback
</Directory>
ErrorDocument 400 /error/HTTP_BAD_REQUEST.html.var
ErrorDocument 401 /error/HTTP_UNAUTHORIZED.html.var
ErrorDocument 403 /error/HTTP_FORBIDDEN.html.var
ErrorDocument 404 /error/HTTP_NOT_FOUND.html.var
ErrorDocument 405 /error/HTTP_METHOD_NOT_ALLOWED.html.var
ErrorDocument 408 /error/HTTP_REQUEST_TIME_OUT.html.var
ErrorDocument 410 /error/HTTP_GONE.html.var
ErrorDocument 411 /error/HTTP_LENGTH_REQUIRED.html.var
ErrorDocument 412 /error/HTTP_PRECONDITION_FAILED.html.var
ErrorDocument 413 /error/HTTP_REQUEST_ENTITY_TOO_LARGE.html.var
ErrorDocument 414 /error/HTTP_REQUEST_URI_TOO_LARGE.html.var
ErrorDocument 415 /error/HTTP_UNSUPPORTED_MEDIA_TYPE.html.var
ErrorDocument 500 /error/HTTP_INTERNAL_SERVER_ERROR.html.var
ErrorDocument 501 /error/HTTP_NOT_IMPLEMENTED.html.var
ErrorDocument 502 /error/HTTP_BAD_GATEWAY.html.var
ErrorDocument 503 /error/HTTP_SERVICE_UNAVAILABLE.html.var
ErrorDocument 506 /error/HTTP_VARIANT_ALSO_VARIES.html.var
</IfModule>
</IfModule>
</IfModule>
Como se puede observar es necesario (directiva IfModule
) tener activo los módulos negotiation
, alias
(que están activos por defectos) y include
que hay que activarlo:
# a2enmod include
Ejercicio
En todos los host virtuales se debe redefinir los mensajes de error de objeto no encontrado y no permitido. Para ello se crearan dos ficheros html dentro del directorio error. Realiza los cambios necesarias para llevarlo a cabo.