[Warning: This matter is far from highly pertinent. One tackles strange
non-problems when in an atypical environment, such as a hotel room in CA.]
I had someone ask me about Subversion autoindex support. So, like, you
point a web browser at
http://svn.apache.org/repos/asf/subversion/site/publish/ and *pow* magically
you are now looking at the index.html inside that directory.
Clearly, this could be done with an hour or two of mod_dav_svn hackery and
some new directives there. But I was trying to come up with an httpd.conf
workaround that did the trick. Here's what I tried. (On my system, all my
Subversion repositories live inside the /repos/ Location.)
# If this is a GET request (but not a subrequest) aimed at my
# collection of Subversion repositories and with a trailing slash, and
# if there exists an index.html file inside that directory, then
# temporarily redirect the browser to the index.html file.
RewriteEngine on
RewriteCond %{IS_SUBREQ} false
RewriteCond %{REQUEST_METHOD} GET
RewriteCond %{REQUEST_URI} ^/repos/.*/$
RewriteCond %{REQUEST_URI}index.html -U
RewriteRule /repos/(.*)/$ /repos/$1/index.html [L,R]
The result was that for every directory in which an index.html was found,
that file was served (via a browser redirect). Yay! Unfortunately, the
redirect was transmitted for directories which had no index.html child, too.
Boo!
Sadly, I found that despite the fact that the Apache docs say about that
"-U" test the following:
'-U' (is existing URL, via subrequest)
Checks whether or not TestString is a valid URL, accessible via all
the server's currently-configured access controls for that path. This
uses an internal subrequest to do the check, so use it with care - it
can impact your server's performance!
In reality "validity" in this context seems to have nothing to do with
"existence". I traced the subrequest that mod_rewrite made into Subversion,
and found that it never enters mod_dav to actually perform an existence get.
I guess I expected that the subrequest would GET all the way into
Subversion, where it would get the appropriate error code (HTTP_NOT_FOUND).
In retrospect, I think I knew that subrequests don't behavior like
full-fledged content-fetching requests. But the documentation quoted above
is pretty misleading, at any rate, IMO.
--
C. Michael Pilato <cmpilato_at_collab.net>
CollabNet <> www.collab.net <> Distributed Development On Demand
Received on 2010-08-20 10:27:51 CEST