mod_rewrite virtual hosting question...

Kurt Granroth plug-discuss at granroth.org
Thu May 25 09:00:26 MST 2006


On Wednesday 24 May 2006 15:23, jon wrote:
> I'm totally confused when it comes to mod_rewrite, but here's what I'm
> trying to do -- redirect any instance of a given domain to a specific
> folder.
>
> So.... let's say I want to visit example.com/index.php, the request
> should go to /var/www/sites/example.com/index.php
>
> What I'm looking for is something flexible -- I don't want to have to
> add vhosts everytime we add a domain to the server, just a site.com
> folder in /var/www/sites

I've appended the top-level .htaccess file that I use for this purpose.  I 
don't remember where I got the core of this but it's custom modified to work 
for my setup.  Basically, it parses out each individual component of the URL 
to a separate sub directory.  This file is in:

/home/user/public_html/.htaccess

If a URL comes in like 'domain.com/index.php', then it looks here:

/home/user/public_html/domain.com/index.php

A URL like 'sub.domain.com/index.php' would redirect to here:

/home/user public_html/domain.com/sub/index.php

And even 'sub.domain.com/dir/tree/index.php' works:

/home/user/public_html/domain.com/sub/dir/tree/index.php

Note that some 3rd party PHP scripts will cause issues since the PHP 'SELF' 
variables and similar will totally ignore your domain name and focus on the 
internal directory structure.  But for 99% of the cases, it works great.

.htaccess:
==========
RewriteEngine on
RewriteBase /

# Prevent problems caused by missing trailing slash
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -d
RewriteRule ^/*([^/\.]+\.[^/]+/)?(.*[^/])$ http://%{HTTP_HOST}/$2/ [R=301,L]

# These lines correct some of badly formed requests.
RewriteCond %{THE_REQUEST} ^[^\ ]+\ /([^/\.\ ]+\.[^/\ ]+)/
RewriteRule ^/*([^/\.]+\.[^/]+)/(.*)$ http://$1/$2 [R=301,L]

# Generic sub / pointed domain code (core part)
RewriteRule ^/*[^/\.]+\.[^/]+/ - [L]

# Match my.domain.org -> DOCUMENT_ROOT/my.domain.org
RewriteCond %{DOCUMENT_ROOT}/%{HTTP_HOST} -d [OR]
RewriteCond %{DOCUMENT_ROOT}/%{HTTP_HOST} -l
RewriteRule ^(.*)$ %{HTTP_HOST}/$1 [L]

# Match my.domain.org -> DOCUMENT_ROOT/domain.org/my
RewriteCond %{HTTP_HOST} ^([^\.]+)\.([^\.]+\.[^\.]+.*)$
RewriteCond %{DOCUMENT_ROOT}/%2/%1 -d
RewriteRule ^(.*)$ %2/%1/$1 [L]

# Match no.domain.org -> DOCUMENT_ROOT/domain.org
RewriteCond %{HTTP_HOST} ^([^\.]+)\.([^\.]+\.[^\.]+.*)$
RewriteCond %{DOCUMENT_ROOT}/%2 -d
RewriteRule ^(.*)$ %2/$1


More information about the PLUG-discuss mailing list