[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."

-- 
You received this bug notification because you are a member of Ubuntu
Server Team, which is subscribed to the bug report.
https://bugs.launchpad.net/bugs/1394403

Title:
  RewriteRule of "^$" is broken

To manage notifications about this bug go to:
https://bugs.launchpad.net/apache2/+bug/1394403/+subscriptions

-- 
Ubuntu-server-bugs mailing list
Ubuntu-server-bugs@lists.ubuntu.com
Modify settings or unsubscribe at: 
https://lists.ubuntu.com/mailman/listinfo/ubuntu-server-bugs

Reply via email to