Dear lazyweb, I’m having severe issues with Apache’s mod_rewrite on my VPS. I’m pretty sure what I want to do is doable, but I can’t figure out the rewrite rules to allow it.
In my httpd.conf I have something similar to this:
<IfModule mod_dav.c> LimitXMLRequestBody 131072 DavLockDB /var/dav/DavLock Alias /dav "/home/user/dav" #<Directory /home/user/dav> <Location /dav> Dav On Options +Indexes IndexOptions FancyIndexing AddDefaultCharset UTF-8 AuthType Basic AuthName "Private" AuthUserFile /home/user/dav.passwd Require valid-user </Location> #</Directory> </IfModule>
This worked fine when the root of the site had nothing but a simple index.html in it. Now I’ve got Drupal7 installed, so it does all the fancy mod_rewrite stuff to get the clean urls, etc. And now when I go to https://site/dav, Drupal is answering and saying “no such directory”. If I have /home/user/dav for the private WebDAV share, I’m using /home/user/public_html/ for the accessible web site (I do this to prevent any accidental exposure to those data files). Incidentally I tried with both <Location> and <Directory> and it makes no difference.
The .htaccess in /home/user/public_html/ looks like this (just the important bits):
<IfModule mod_rewrite.c> RewriteEngine on RewriteRule ^/dav(/.*)$ /dav/$1 [L,QSA] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} !=/favicon.ico RewriteRule ^(.*)$ index.php?q=$1 [L,QSA] </IfModule>
I’ve tried a number of variations (the above is my latest try). Also tried things like:
RewriteCond %{REQUEST_URI} !^/dav
With and without the extra .* bits, etc.
I am literally tearing my hear out here. Does anyone have any idea what I’m doing wrong? I basically want it to go “hey, you want /dav? ok, I won’t rewrite anything and you can have it) and have /dav/[whatever] loaded requiring auth to access. Something in the mod_rewrite is killing it, and I suspect it might have to do with Alias. Maybe all this stuff needs to be in httpd.conf instead of .htaccess?