2 votos

Apache envía 400 en lugar de 404

Tengo un problema extraño. Apache responde con un código de error 400 en lugar de 404 cuando un cliente solicita una página jsp que no existe (las peticiones html se responden correctamente con un 404). La única vez que Apache sirve correctamente con un 404 es cuando la petición a la página inexistente es a un archivo en el directorio root. Soy consciente de que el directorio root coincide con una regla de reescritura, pero aún así no parece relevante.

Por ejemplo:

www.xxx.com/jjj.jsp - 404
www.xxx.com/bla/jjj.jsp - 400

Tengo Apache 2.2 y Tomcat 6 instalado con mod_jk. Reenvío todas las peticiones jsp a mod_jk. Aquí está mi entrada relevante httpd.conf:

ServerAdmin xxx@xxx.com
DocumentRoot /opt/tomcat/webapps/sb
ServerName xxx
ErrorLog /var/log/httpd/xxx/error_log
CustomLog /var/log/httpd/xxx/custom_logs common

JkMount /*.jsp ajp13

RewriteEngine On
RewriteLogLevel 9
RewriteLog /var/log/httpd/xxx/rewrite.log
RewriteCond %{HTTP_HOST} !^www\.xxx\.com$ [NC]
RewriteRule ^(.*)$ http://www.xxx.com$1 [R=301,L]
RewriteRule ^/([\w\d]*).jsp$ /sb/jsp/$1.jsp [PT,NC,QSA,L]
RewriteRule ^/$ /sb/jsp/index.jsp [PT] [NC] [QSA] [L]

Esta es una salida de custom_logs

x.x.x.x - - [08/Dec/2010:09:34:40 -0500] "GET /examples/ddd.jsp HTTP/1.1" 400
x.x.x.x - - [08/Dec/2010:09:59:59 -0500] "GET /gti.jsp HTTP/1.0" 200 662

1voto

Tim Funk Puntos 384

El error proviene de tomcat. Golpea directamente a tomcat.

También las reglas de reescritura para RewriteRule ^/([\w\d]*).jsp$ /sb/jsp/$1.jsp [PT,NC,QSA,L] es atrapar los jsps de nivel root. Es decir - cualquier jsp en el directorio de nivel superior. Así que cuando hay un /gfoo.jsp se ejecuta - se reescribe a /sb/jsp/foo.jsp - de lo contrario no se reescribe.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X