[Test Case]
Setup Apache 2.4.7 * mod_rewrite * mod_ajp * mod_dir
Tomcat * Listening on Port 9001
Apache with a .htaccess in the example.net VirtualHost
RewriteEngine On RewriteRule ^(.*)$ ajp://localhost:9001/$1 [P]
Expected: Return from Tomcat
HTTP Status 404 - /
Reality: Return from Tomcat
HTTP Status 404 - /index.html
Workaround for this particular setup was to either disable mod_dir or disable DirectoryIndex in .htaccess.
Or on VirtualHost context use ProxyPass.
ProxyPass / ajp://localhost:9001/ ProxyPassReverse / ajp://localhost:9001/
[Impact]
With DirectoryIndex disabled: <pre> [Thu Apr 30 13:55:18.761066 2015] [rewrite:trace3] [pid 31422] mod_rewrite.c(468): [client XXX.XXX.XXX.XXX:38052] XXX.XXX.XXX.XXX - - [example.net/sid#7fc6ddd849f8][rid#7fc6ddcb50a0/initial] [perdir /home/www-data/example.net/] strip per-dir prefix: /home/www-data/example.net/ -> [Thu Apr 30 13:55:18.761191 2015] [rewrite:trace3] [pid 31422] mod_rewrite.c(468): [client XXX.XXX.XXX.XXX:38052] XXX.XXX.XXX.XXX - - [example.net/sid#7fc6ddd849f8][rid#7fc6ddcb50a0/initial] [perdir /home/www-data/example.net/] applying pattern '^(.*)$' to uri '' [Thu Apr 30 13:55:18.761215 2015] [rewrite:trace2] [pid 31422] mod_rewrite.c(468): [client XXX.XXX.XXX.XXX:38052] XXX.XXX.XXX.XXX - - [example.net/sid#7fc6ddd849f8][rid#7fc6ddcb50a0/initial] [perdir /home/www-data/example.net/] rewrite '' -> 'ajp://localhost:9001/' [Thu Apr 30 13:55:18.761232 2015] [rewrite:trace2] [pid 31422] mod_rewrite.c(468): [client XXX.XXX.XXX.XXX:38052] XXX.XXX.XXX.XXX - - [example.net/sid#7fc6ddd849f8][rid#7fc6ddcb50a0/initial] [perdir /home/www-data/example.net/] escaped URI in per-dir context for proxy, ajp://localhost:9001/ -> ajp://localhost:9001/ [Thu Apr 30 13:55:18.761245 2015] [rewrite:trace2] [pid 31422] mod_rewrite.c(468): [client XXX.XXX.XXX.XXX:38052] XXX.XXX.XXX.XXX - - [example.net/sid#7fc6ddd849f8][rid#7fc6ddcb50a0/initial] [perdir /home/www-data/example.net/] forcing proxy-throughput with ajp://localhost:9001/ [Thu Apr 30 13:55:18.761259 2015] [rewrite:trace1] [pid 31422] mod_rewrite.c(468): [client XXX.XXX.XXX.XXX:38052] XXX.XXX.XXX.XXX - - [example.net/sid#7fc6ddd849f8][rid#7fc6ddcb50a0/initial] [perdir /home/www-data/example.net/] go-ahead with proxy request proxy:ajp://localhost:9001/ [OK] </pre>
With DirectoryIndex enabled: <pre> [Thu Apr 30 13:58:37.954876 2015] [rewrite:trace3] [pid 31419] mod_rewrite.c(468): [client XXX.XXX.XXX.XXX:38156] XXX.XXX.XXX.XXX - - [example.net/sid#7fc6ddd849f8][rid#7fc6ddcb10a0/initial] [perdir /home/www-data/example.net/] strip per-dir prefix: /home/www-data/example.net/ -> [Thu Apr 30 13:58:37.954930 2015] [rewrite:trace3] [pid 31419] mod_rewrite.c(468): [client XXX.XXX.XXX.XXX:38156] XXX.XXX.XXX.XXX - - [example.net/sid#7fc6ddd849f8][rid#7fc6ddcb10a0/initial] [perdir /home/www-data/example.net/] applying pattern '^(.*)$' to uri '' [Thu Apr 30 13:58:37.954947 2015] [rewrite:trace2] [pid 31419] mod_rewrite.c(468): [client XXX.XXX.XXX.XXX:38156] XXX.XXX.XXX.XXX - - [example.net/sid#7fc6ddd849f8][rid#7fc6ddcb10a0/initial] [perdir /home/www-data/example.net/] rewrite '' -> 'ajp://localhost:9001/' [Thu Apr 30 13:58:37.954959 2015] [rewrite:trace2] [pid 31419] mod_rewrite.c(468): [client XXX.XXX.XXX.XXX:38156] XXX.XXX.XXX.XXX - - [example.net/sid#7fc6ddd849f8][rid#7fc6ddcb10a0/initial] [perdir /home/www-data/example.net/] escaped URI in per-dir context for proxy, ajp://localhost:9001/ -> ajp://localhost:9001/ [Thu Apr 30 13:58:37.954968 2015] [rewrite:trace2] [pid 31419] mod_rewrite.c(468): [client XXX.XXX.XXX.XXX:38156] XXX.XXX.XXX.XXX - - [example.net/sid#7fc6ddd849f8][rid#7fc6ddcb10a0/initial] [perdir /home/www-data/example.net/] forcing proxy-throughput with ajp://localhost:9001/ [Thu Apr 30 13:58:37.954977 2015] [rewrite:trace1] [pid 31419] mod_rewrite.c(468): [client XXX.XXX.XXX.XXX:38156] XXX.XXX.XXX.XXX - - [example.net/sid#7fc6ddd849f8][rid#7fc6ddcb10a0/initial] [perdir /home/www-data/example.net/] go-ahead with proxy request proxy:ajp://localhost:9001/ [OK] [Thu Apr 30 13:58:37.955023 2015] [rewrite:trace3] [pid 31419] mod_rewrite.c(468): [client XXX.XXX.XXX.XXX:38156] XXX.XXX.XXX.XXX - - [example.net/sid#7fc6ddd849f8][rid#7fc6ddcb30a0/subreq] [perdir /home/www-data/example.net/] strip per-dir prefix: /home/www-data/example.net/index.html -> index.html [Thu Apr 30 13:58:37.955036 2015] [rewrite:trace3] [pid 31419] mod_rewrite.c(468): [client XXX.XXX.XXX.XXX:38156] XXX.XXX.XXX.XXX - - [example.net/sid#7fc6ddd849f8][rid#7fc6ddcb30a0/subreq] [perdir /home/www-data/example.net/] applying pattern '^(.*)$' to uri 'index.html' [Thu Apr 30 13:58:37.955076 2015] [rewrite:trace2] [pid 31419] mod_rewrite.c(468): [client XXX.XXX.XXX.XXX:38156] XXX.XXX.XXX.XXX - - [example.net/sid#7fc6ddd849f8][rid#7fc6ddcb30a0/subreq] [perdir /home/www-data/example.net/] rewrite 'index.html' -> 'ajp://localhost:9001/index.html' [Thu Apr 30 13:58:37.955086 2015] [rewrite:trace2] [pid 31419] mod_rewrite.c(468): [client XXX.XXX.XXX.XXX:38156] XXX.XXX.XXX.XXX - - [example.net/sid#7fc6ddd849f8][rid#7fc6ddcb30a0/subreq] [perdir /home/www-data/example.net/] escaped URI in per-dir context for proxy, ajp://localhost:9001/index.html -> ajp://localhost:9001/index.html [Thu Apr 30 13:58:37.955094 2015] [rewrite:trace2] [pid 31419] mod_rewrite.c(468): [client XXX.XXX.XXX.XXX:38156] XXX.XXX.XXX.XXX - - [example.net/sid#7fc6ddd849f8][rid#7fc6ddcb30a0/subreq] [perdir /home/www-data/example.net/] forcing proxy-throughput with ajp://localhost:9001/index.html [Thu Apr 30 13:58:37.955103 2015] [rewrite:trace1] [pid 31419] mod_rewrite.c(468): [client XXX.XXX.XXX.XXX:38156] XXX.XXX.XXX.XXX - - [example.net/sid#7fc6ddd849f8][rid#7fc6ddcb30a0/subreq] [perdir /home/www-data/example.net/] go-ahead with proxy request proxy:ajp://localhost:9001/index.html [OK] </pre>
[Regression Potential]
As stated on the apache bugtracker https://bz.apache.org/bugzilla/show_bug.cgi?id=53929#c10:
"The behavior now seems to be consistent with 2.2, and a rewrite rule that conflicts with a DirectoryIndex gets applied."
[Test Case]
Setup
Apache 2.4.7
* mod_rewrite
* mod_ajp
* mod_dir
Tomcat
* Listening on Port 9001
Apache with a .htaccess in the example.net VirtualHost
RewriteEngine On :9001/$ 1 [P]
RewriteRule ^(.*)$ ajp://localhost
Expected:
Return from Tomcat
HTTP Status 404 - /
Reality:
Return from Tomcat
HTTP Status 404 - /index.html
Workaround for this particular setup was to either disable mod_dir or disable DirectoryIndex in .htaccess.
Or on VirtualHost context use ProxyPass.
ProxyPass / ajp://localhost :9001/ :9001/
ProxyPassReverse / ajp://localhost
[Impact]
With DirectoryIndex disabled: XXX.XXX: 38052] XXX.XXX.XXX.XXX - - [example. net/sid# 7fc6ddd849f8] [rid#7fc6ddcb50 a0/initial] [perdir /home/www- data/example. net/] strip per-dir prefix: /home/www- data/example. net/ -> XXX.XXX: 38052] XXX.XXX.XXX.XXX - - [example. net/sid# 7fc6ddd849f8] [rid#7fc6ddcb50 a0/initial] [perdir /home/www- data/example. net/] applying pattern '^(.*)$' to uri '' XXX.XXX: 38052] XXX.XXX.XXX.XXX - - [example. net/sid# 7fc6ddd849f8] [rid#7fc6ddcb50 a0/initial] [perdir /home/www- data/example. net/] rewrite '' -> 'ajp:// localhost: 9001/' XXX.XXX: 38052] XXX.XXX.XXX.XXX - - [example. net/sid# 7fc6ddd849f8] [rid#7fc6ddcb50 a0/initial] [perdir /home/www- data/example. net/] escaped URI in per-dir context for proxy, ajp://localhost :9001/ -> ajp://localhost :9001/ XXX.XXX: 38052] XXX.XXX.XXX.XXX - - [example. net/sid# 7fc6ddd849f8] [rid#7fc6ddcb50 a0/initial] [perdir /home/www- data/example. net/] forcing proxy-throughput with ajp://localhost :9001/ XXX.XXX: 38052] XXX.XXX.XXX.XXX - - [example. net/sid# 7fc6ddd849f8] [rid#7fc6ddcb50 a0/initial] [perdir /home/www- data/example. net/] go-ahead with proxy request proxy:ajp: //localhost: 9001/ [OK]
<pre>
[Thu Apr 30 13:55:18.761066 2015] [rewrite:trace3] [pid 31422] mod_rewrite.c(468): [client XXX.XXX.
[Thu Apr 30 13:55:18.761191 2015] [rewrite:trace3] [pid 31422] mod_rewrite.c(468): [client XXX.XXX.
[Thu Apr 30 13:55:18.761215 2015] [rewrite:trace2] [pid 31422] mod_rewrite.c(468): [client XXX.XXX.
[Thu Apr 30 13:55:18.761232 2015] [rewrite:trace2] [pid 31422] mod_rewrite.c(468): [client XXX.XXX.
[Thu Apr 30 13:55:18.761245 2015] [rewrite:trace2] [pid 31422] mod_rewrite.c(468): [client XXX.XXX.
[Thu Apr 30 13:55:18.761259 2015] [rewrite:trace1] [pid 31422] mod_rewrite.c(468): [client XXX.XXX.
</pre>
With DirectoryIndex enabled: XXX.XXX: 38156] XXX.XXX.XXX.XXX - - [example. net/sid# 7fc6ddd849f8] [rid#7fc6ddcb10 a0/initial] [perdir /home/www- data/example. net/] strip per-dir prefix: /home/www- data/example. net/ -> XXX.XXX: 38156] XXX.XXX.XXX.XXX - - [example. net/sid# 7fc6ddd849f8] [rid#7fc6ddcb10 a0/initial] [perdir /home/www- data/example. net/] applying pattern '^(.*)$' to uri '' XXX.XXX: 38156] XXX.XXX.XXX.XXX - - [example. net/sid# 7fc6ddd849f8] [rid#7fc6ddcb10 a0/initial] [perdir /home/www- data/example. net/] rewrite '' -> 'ajp:// localhost: 9001/' XXX.XXX: 38156] XXX.XXX.XXX.XXX - - [example. net/sid# 7fc6ddd849f8] [rid#7fc6ddcb10 a0/initial] [perdir /home/www- data/example. net/] escaped URI in per-dir context for proxy, ajp://localhost :9001/ -> ajp://localhost :9001/ XXX.XXX: 38156] XXX.XXX.XXX.XXX - - [example. net/sid# 7fc6ddd849f8] [rid#7fc6ddcb10 a0/initial] [perdir /home/www- data/example. net/] forcing proxy-throughput with ajp://localhost :9001/ XXX.XXX: 38156] XXX.XXX.XXX.XXX - - [example. net/sid# 7fc6ddd849f8] [rid#7fc6ddcb10 a0/initial] [perdir /home/www- data/example. net/] go-ahead with proxy request proxy:ajp: //localhost: 9001/ [OK] XXX.XXX: 38156] XXX.XXX.XXX.XXX - - [example. net/sid# 7fc6ddd849f8] [rid#7fc6ddcb30 a0/subreq] [perdir /home/www- data/example. net/] strip per-dir prefix: /home/www- data/example. net/index. html -> index.html XXX.XXX: 38156] XXX.XXX.XXX.XXX - - [example. net/sid# 7fc6ddd849f8] [rid#7fc6ddcb30 a0/subreq] [perdir /home/www- data/example. net/] applying pattern '^(.*)$' to uri 'index.html' XXX.XXX: 38156] XXX.XXX.XXX.XXX - - [example. net/sid# 7fc6ddd849f8] [rid#7fc6ddcb30 a0/subreq] [perdir /home/www- data/example. net/] rewrite 'index.html' -> 'ajp:// localhost: 9001/index. html' XXX.XXX: 38156] XXX.XXX.XXX.XXX - - [example. net/sid# 7fc6ddd849f8] [rid#7fc6ddcb30 a0/subreq] [perdir /home/www- data/example. net/] escaped URI in per-dir context for proxy, ajp://localhost :9001/index. html -> ajp://localhost :9001/index. html XXX.XXX: 38156] XXX.XXX.XXX.XXX - - [example. net/sid# 7fc6ddd849f8] [rid#7fc6ddcb30 a0/subreq] [perdir /home/www- data/example. net/] forcing proxy-throughput with ajp://localhost :9001/index. html XXX.XXX: 38156] XXX.XXX.XXX.XXX - - [example. net/sid# 7fc6ddd849f8] [rid#7fc6ddcb30 a0/subreq] [perdir /home/www- data/example. net/] go-ahead with proxy request proxy:ajp: //localhost: 9001/index. html [OK]
<pre>
[Thu Apr 30 13:58:37.954876 2015] [rewrite:trace3] [pid 31419] mod_rewrite.c(468): [client XXX.XXX.
[Thu Apr 30 13:58:37.954930 2015] [rewrite:trace3] [pid 31419] mod_rewrite.c(468): [client XXX.XXX.
[Thu Apr 30 13:58:37.954947 2015] [rewrite:trace2] [pid 31419] mod_rewrite.c(468): [client XXX.XXX.
[Thu Apr 30 13:58:37.954959 2015] [rewrite:trace2] [pid 31419] mod_rewrite.c(468): [client XXX.XXX.
[Thu Apr 30 13:58:37.954968 2015] [rewrite:trace2] [pid 31419] mod_rewrite.c(468): [client XXX.XXX.
[Thu Apr 30 13:58:37.954977 2015] [rewrite:trace1] [pid 31419] mod_rewrite.c(468): [client XXX.XXX.
[Thu Apr 30 13:58:37.955023 2015] [rewrite:trace3] [pid 31419] mod_rewrite.c(468): [client XXX.XXX.
[Thu Apr 30 13:58:37.955036 2015] [rewrite:trace3] [pid 31419] mod_rewrite.c(468): [client XXX.XXX.
[Thu Apr 30 13:58:37.955076 2015] [rewrite:trace2] [pid 31419] mod_rewrite.c(468): [client XXX.XXX.
[Thu Apr 30 13:58:37.955086 2015] [rewrite:trace2] [pid 31419] mod_rewrite.c(468): [client XXX.XXX.
[Thu Apr 30 13:58:37.955094 2015] [rewrite:trace2] [pid 31419] mod_rewrite.c(468): [client XXX.XXX.
[Thu Apr 30 13:58:37.955103 2015] [rewrite:trace1] [pid 31419] mod_rewrite.c(468): [client XXX.XXX.
</pre>
[Regression Potential]
As stated on the apache bugtracker https:/ /bz.apache. org/bugzilla/ show_bug. cgi?id= 53929#c10:
"The behavior now seems to be consistent with 2.2, and a rewrite rule that conflicts with a DirectoryIndex gets applied."