Назад | Перейти на главную страницу

Apache отправляет 400 вместо 404

У меня странная проблема. Apache отвечает кодом ошибки 400 вместо 404, когда клиент запрашивает несуществующую страницу jsp (на html-запрос правильно отвечает 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.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]

Вот вывод 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

Ошибка исходит от кота. Ударил кота напрямую.

Также правила перезаписи для RewriteRule ^/([\w\d]*).jsp$ /sb/jsp/$1.jsp [PT,NC,QSA,L] ловит jsps корневого уровня. То есть - любой jsp в каталоге верхнего уровня. Итак, когда есть /gfoo.jsp запускается - он перезаписывается в /sb/jsp/foo.jsp - иначе он не перезаписывается.