Apache发送400而不是404

我有一个奇怪的问题。 当客户端请求一个不存在的jsp页面(html请求被一个404正确回答)时,Apache正在用400错误代码而不是404来回答。 Apache正确服务于404的唯一时间是对不存在页面的请求是对根目录中的文件的请求。 我知道,根目录匹配重写规则,但似乎并不相关。

例如:

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

我有Apache 2.2和Tomcat 6安装与mod_jk。 我把所有的jsp请求转发到mod_jk。 这是我的相关httpd.confinput:

 ServerAdmin [email protected] 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] 

这是来自custom_logs的输出

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

错误来自tomcat。 直接点击tomcat。

另外RewriteRule ^/([\w\d]*).jsp$ /sb/jsp/$1.jsp [PT,NC,QSA,L]的重写规则捕获根级jsps。 那就是 – 顶层目录中的任何jsp。 因此,当运行/gfoo.jsp时,它将被重写为/sb/jsp/foo.jsp – 否则不会被重写。