You are viewing a plain text version of this content. The canonical link for it is here.
Posted to bugs@httpd.apache.org by bu...@apache.org on 2004/09/14 05:10:36 UTC
DO NOT REPLY [Bug 31210] New: -
Problematic competition between mod_rewrite and mod_dir
DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://issues.apache.org/bugzilla/show_bug.cgi?id=31210>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND
INSERTED IN THE BUG DATABASE.
http://issues.apache.org/bugzilla/show_bug.cgi?id=31210
Problematic competition between mod_rewrite and mod_dir
Summary: Problematic competition between mod_rewrite and mod_dir
Product: Apache httpd-2.0
Version: 2.0.50
Platform: Other
URL: http://rewritetest.queso.org/
OS/Version: Linux
Status: NEW
Severity: Major
Priority: Other
Component: mod_dir
AssignedTo: bugs@httpd.apache.org
ReportedBy: bugzilla-apache@queso.com
I seem to have discovered what I think is a bug in the interaction between
mod_dir and mod_rewrite (at least as it functions on a per-directory basis)
today. It didn't exist on my old installation (1.3.27); when I moved a site
over to my new installation (2.0.50), the bug reared its head.
Say that you have a server with two files and a directory in its DocumentRoot,
index.php, stuff.txt, and /stuff. One function of index.php is to include the
text of a file passed in as the query string -- e.g., /index.php?stuff.txt would
include the text of the file stuff.txt. Now, say that the following .htaccess
file existed:
RewriteEngine on
RewriteRule ^(stuff)$ /index.php?$1.txt [L]
which served to allow people to shorten URLs; instead of /index.php?stuff.txt,
that would allow them to type /stuff and have the rewriting take place internal
to httpd.
The problem here is that there's *also* a directory named /stuff, and while
mod_rewrite sees a match with the URI "/stuff", mod_dir sees a potential
directory name expansion from "/stuff" to "/stuff/". And the way that it all
comes together is just broken -- the end result is "/stuff/?stuff.txt", which is
just wrong.
The relevant directory definition in my httpd.conf file is:
<Directory (DocumentRoot directory)>
Options FollowSymLinks
RewriteEngine on
AllowOverride FileInfo AuthConfig Limit Indexes
</Directory>
The virtual host definition is:
<VirtualHost 204.193.152.163>
ServerName rewritetest.queso.org
DocumentRoot (DocumentRoot directory)
CustomLog logs/rewrite-access_log combined
ErrorLog logs/rewrite-error_log
DirectoryIndex index.php
RewriteEngine on
SuexecUserGroup rewrite rewrite
</VirtualHost>
There aren't any other directives in the httpd.conf file that would affect the
behavior of the host; the order that the LoadModule statements is that mod_dir
is loaded before mod_rewrite. (While I know that the new API structure is
supposed to make it meaningless what order they are loaded, I also know that
there have been a few edge cases in Bugzilla that showed that it can matter at
times.)
I've put together a test website that shows the problem -- it's (shockingly)
located at http://rewritetest.queso.org/, and there's a slightly more
fleshed-out example there, along with all the relevant sources and log files.
Am I right that this is a bug, or is there something I'm missing in how one
configures mod_rewrite and/or mod_dir?
---------------------------------------------------------------------
To unsubscribe, e-mail: bugs-unsubscribe@httpd.apache.org
For additional commands, e-mail: bugs-help@httpd.apache.org