Versi�n 2.2 del Servidor HTTP Apache
Apache ofrece la posibilidad de que los webmasters puedan configurar las respuestas que muestra el servidor Apache cuando se producen algunos errores o problemas.
Las respuestas personalizadas pueden definirse para activarse en caso de que el servidor detecte un error o problema.
Si un script termina de forma anormal y se produce una respuesta "500 Server Error", esta respuesta puede ser sustituida por otro texto de su elecci�n o por una redirecci�n a otra URL (local o externa).
NCSA httpd 1.3 devolv�a mensajes antiguos del error o problema encontrado que con frecuencia no ten�an significado alguno para el usuario, y que no inclu�an en los logs informaci�n que diera pistas sobre las causas de lo sucedido.
Se puede hacer que el servidor siga uno de los siguientes comportamientos:
Redireccionar a otra URL puede resultar de utilidad, pero solo si con ello se puede tambi�n pasar alguna informaci�n que pueda explicar el error o problema y/o registrarlo en el log correspondiente m�s claramente.
Para conseguir esto, Apache define ahora variables de entorno similares a las de los CGI:
REDIRECT_HTTP_ACCEPT=*/*, image/gif, image/x-xbitmap,
image/jpeg
REDIRECT_HTTP_USER_AGENT=Mozilla/1.1b2 (X11; I; HP-UX A.09.05
9000/712)
REDIRECT_PATH=.:/bin:/usr/local/bin:/etc
REDIRECT_QUERY_STRING=
REDIRECT_REMOTE_ADDR=121.345.78.123
REDIRECT_REMOTE_HOST=ooh.ahhh.com
REDIRECT_SERVER_NAME=crash.bang.edu
REDIRECT_SERVER_PORT=80
REDIRECT_SERVER_SOFTWARE=Apache/0.8.15
REDIRECT_URL=/cgi-bin/buggy.pl
Tenga en cuenta el prefijo REDIRECT_
.
Al menos REDIRECT_URL
y
REDIRECT_QUERY_STRING
se pasar�n a la nueva
URL (asumiendo que es un cgi-script o un cgi-include). Las otras
variables existir�n solo si exist�an antes de aparecer
el error o problema. Ninguna de estas variables
se crear� si en la directiva ErrorDocument
ha especificado una
redirecci�n externa (cualquier cosa que empiece
por un nombre de esquema del tipo http:
, incluso si
se refiere al mismo servidor).
El uso de ErrorDocument
est� activado para los ficheros .htaccess cuando AllowOverride
tiene el valor
adecuado.
Aqu� hay algunos ejemplos m�s...
ErrorDocument 500 /cgi-bin/crash-recover
ErrorDocument 500 "Sorry, our script crashed. Oh dear"
ErrorDocument 500 http://xxx/
ErrorDocument 404 /Lame_excuses/not_found.html
ErrorDocument 401 /Subscription/how_to_subscribe.html
La sintaxis es,
ErrorDocument <3-digit-code> <action>
donde action puede ser,
El comportamiento de Apache en cuanto a las redirecciones ha cambiado para que puedan usarse m�s variables de entorno con los script/server-include.
Las variables CGI est�ndar estaban disponibles para el script al que se hac�a la redirecci�n. No se inclu�a ninguna indicaci�n sobre la precedencia de la redirecci�n.
Un nuevo grupo de variables de entorno se inicializa para que
las use el script al que ha sido redireccionado. Cada
nueva variable tendr� el prefijo REDIRECT_
.
Las variables de entorno REDIRECT_
se crean a
partir de de las variables de entorno CGI que existen antes de
la redirecci�n, se les cambia el nombre
a�adi�ndoles el prefijo REDIRECT_
, por
ejemplo, HTTP_USER_AGENT
pasa a ser
REDIRECT_HTTP_USER_AGENT
. Adem�s, para esas
nuevas variables, Apache definir� REDIRECT_URL
y REDIRECT_STATUS
para ayudar al script a seguir su
origen. Tanto la URL original como la URL a la que es redirigida
la petici�n pueden almacenarse en los logs de acceso.
Si ErrorDocument especifica una redirecci�n local a un
script CGI, el script debe incluir una campo de cabeceraa
"Status:
" en el resultado final para asegurar que
es posible hacer llegar al cliente de vuelta la condici�n
de error que lo provoc�. Por ejemplo, un script en Perl
para usar con ErrorDocument podr�a incluir lo
siguiente:
...
print "Content-type: text/html\n";
printf "Status: %s Condition Intercepted\n", $ENV{"REDIRECT_STATUS"};
...
Si el script tiene como fin tratar una determinada
condici�n de error, por ejemplo
404 Not Found
, se pueden usar los
c�digos de error y textos espec�ficos en su lugar.
Tenga en cuenta que el script debe incluir un campo
de cabecera Status:
apropiado (como
302 Found
), si la respuesta contiene un campo de
cabecera Location:
(para poder enviar una
redirecci�n que se interprete en el cliente). De otra
manera, la cabecera
Location:
puede que no tenga efecto.