I'm struggling a bit with this mod_rewrite rule,

RewriteEngine On
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule . %{REQUEST_FILENAME}.html

My goal is, when someone requests http://example.com/.../foo, to respond
with "foo.html", if it exists

I originally tried doing this with MultiViews, but MultiViews won't
respond with "foo.html" if "foo" exists, and I have a case where I want,

* http://example.com/.../foo to respond with "foo.html",
* http://example.com/.../foo/ to respond with "foo/index.html",
* http://example.com/.../foo/bar to respond with "foo/bar.html"

I originally posted about how to do this with MultiViews here,
http://thread.gmane.org/gmane.comp.apache.user/87707

Aside from patching mod_negotiation, I think my only option is to use
mod_rewrite?

This %{REQUEST_FILENAME}.html rule is inferior to MultiViews because it
doesn't consider the Accept: request header - but it's good enough for
my case

My first struggle was with DirectorySlash - in server context, this
%{REQUEST_FILENAME}.html rule works, even with mod_dir enabled - but
in .htaccess context, mod_dir redirects requests for
http://example.com/.../foo to http://example.com/.../foo/ before the
rule can respond with "foo.html" instead

I set "DirectorySlash Off" to get around this

My second and current struggle is that in one case, the directory "foo"
already contains a .htaccess with,

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .* index.php

This rule works, before and after I added the %{REQUEST_FILENAME}.html
rule and "DirectorySlash Off" to a .htaccess in the parent directory -
but the %{REQUEST_FILENAME}.html rule doesn't work in this case -
requests for http://example.com/.../foo don't respond with "foo.html" :
(

I found that if I comment all the "Rewrite" statements out of
"foo/.htaccess", then the %{REQUEST_FILENAME}.html rule works again - I
guess any "Rewrite" directive in a .htaccess disables rules in .htaccess
files in parent directories?

So I tried copying the %{REQUEST_FILENAME}.html rule to "foo/.htaccess",
but this still doesn't work - I think "RewriteRule ^$ ..." in
"foo/.htaccess" matches http://example.com/.../foo/, but doesn't match
http://example.com/.../foo

So it seems there's no way for a mod_rewrite rule in .htaccess context
to match http://example.com/.../foo - with "RewriteRule .
%{REQUEST_FILENAME}.html" in the parent directory, and "RewriteRule ^$
%{REQUEST_FILENAME}.html" in "foo/.htaccess", the rule in
"foo/.htaccess" disables the rule in the parent directory, without
possibly matching http://example.com/.../foo

Can we please have on or the other? : )

Either rules in "foo/.htaccess" can match http://example.com/.../foo or
rules in the parent directory can match http://example.com/.../foo -
currently it seems neither is true : (

I checked that this is still the case with trunk revision 883548

I used this httpd.conf,
http://www.sfu.ca/~jdbates/tmp/apache/200911240/httpd.conf

- and these .htaccess files,
http://www.sfu.ca/~jdbates/tmp/apache/200911240/www.tgz

I didn't have any more success by adding "RewriteOptions inherit"

---------------------------------------------------------------------
The official User-To-User support forum of the Apache HTTP Server Project.
See <URL:http://httpd.apache.org/userslist.html> for more info.
To unsubscribe, e-mail: users-unsubscr...@httpd.apache.org
   "   from the digest: users-digest-unsubscr...@httpd.apache.org
For additional commands, e-mail: users-h...@httpd.apache.org

Reply via email to