getting mod_rewrite to work on Mac OS X

I'm trying to get mod rewrite to work on my Mac. This is the content of the .htaccess file:

<Files *\.ini>
  order allow,deny
  deny from all
</Files>

RewriteEngine on
RewriteRule .* index.php

I know this is active, because it's blocking .ini files properly, and it seems to rewrite the fictional request /foo to index.php, as this is the error I'm seeing in the browser:

The requested URL /Users/rwel/Sites/dev/quaestio/index.php was not found on this server.

The index.php file currently just contains an exit statement for testing purposes, and it does work when calling it directly. So, the question is, what's going wrong? I went into the apache error log, and this is what I saw:

[Thu Nov 03 14:36:02 2011] [error] [client 127.0.0.1] File does not exist: /Library/WebServer/Documents/Users

So the problem might be that it's not searching in the root, but relative to the /Library/WebServer/Documents directory. Am I right? How can I fix this?

Thanks for your help!


You should set up Virtual Hosts.

In /etc/apache2/httpd.conf uncomment the line:

#Include /private/etc/apache2/extra/httpd-vhosts.conf

Now edit /etc/apache2/extra/httpd-vhosts.conf. Remove the example vhosts, but do specify a default vhost as the first one. Here's an example config.

NameVirtualHost *:80

<VirtualHost *:80>
        DocumentRoot /Library/WebServer/Documents
</VirtualHost>

<VirtualHost *:80>
        ServerName myproject
        DocumentRoot /Users/username/Sites/myproject
        <Directory /Users/username/Sites/myproject>
                Order Allow,Deny
                Allow from all
        </Directory>
</VirtualHost>

Restart apache by running apache2ctl restart.

You should add an entry to your /etc/hosts file so that your servername resolves:

127.0.0.1  myproject

Now, when accessing the http://myproject, your rewrite rules will be relative to the right document root.