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