Apache 发送 400 而不是 404

Apache 发送 400 而不是 404

我遇到了一个奇怪的问题。每当客户端请求不存在的 jsp 页面时,Apache 都会回复 400 错误代码而不是 404(html 请求会正确回复 404)。只有当对不存在页面的请求是针对根目录中的文件时,Apache 才会正确响应 404。我知道根目录符合重写规则,但似乎仍然不相关。

例如:

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

我已使用 mod_jk 安装了 Apache 2.2 和 Tomcat 6。我将所有 jsp 请求转发到 mod_jk。以下是我的相关 httpd.conf 输入:

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 的输出

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

答案1

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

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

相关内容