Apache2 VirtualHost auto subdomain

I just got myself a brand new Linux-server (Debian Stable). The server is primarily used for webhosting and webdevelopment.

I installed Apache2, PHP5 and MySQL and it all works.

The way I organize my sites, is with the following path: /var/www/username/website.com

Now I wan't the server to automatically "make"/recognize subdomains.

/var/www/username/sub.website.com > http://sub.website.com

I wan't the above to happen automatically. How to do that?


Solution 1:

The best way to do it would be to put links to all sites in a specific directory and do something like this :

<VirtualHost *:80>
        RewriteEngine On
        RewriteMap lowercase int:tolower
        # if already rewitten and we have the right path, stop right here
        RewriteRule ^(/where/your/sites/are/[^/]+/.*)$ $1 [L]
        RewriteRule ^(.+) ${lowercase:%{SERVER_NAME}}$1 [C]
        RewriteRule ^(www\.)?([^/]+)/(.*)$ /where/your/sites/are/$2/$3 [L,E=VHOST_ROOT:/where/your/sites/are/$2/]
</VirtualHost>

Solution 2:

You can use mass virtual hosting. In your case you will not be able to use it in the main apache configuration because of '/username/' in the path but you can create a virtualhost per user then use mass virtual hosting in the virtual host.

Example:

<VirtualHost *:80>
ServerName domain.tld
ServerAlias *.domain.tld
VirtualDocumentRoot /var/www/user1/%0/
</VirtualHost>

<VirtualHost *:80>
ServerName domain2.tld
ServerAlias *.domain2.tld
VirtualDocumentRoot /var/www/user2/%0/
</VirtualHost>

...

With mod rewrite you can them make domain.tld to rewrite to point to the www directory