Apache: virtualhost on each sub-domain to corresponding directory
Asked Answered
A

2

5

I would like to do something like this:

<VirtualHost *:80>
  ServerName $variable.example.com
  DocumentRoot /var/www/$variable
</VirtualHost>

for example if I go to foo.example.com it must show me /var/www/foo directory content

What is the good apache syntax for that?

Antoniettaantonin answered 12/9, 2013 at 8:51 Comment(1)
check this #18714793 for mass-visrtualhosting panel of solutionsVudimir
D
8

You can't have $variable like that in servername and map it to the document root, but you can use mod_rewrite and a wildcard.

<VirtualHost *:80>
  ServerName subdomain.example.com
  ServerAlias *.example.com
  DocumentRoot /var/www/

  RewriteCond %{HTTP_HOST} !^www\. [NC]
  RewriteCond %{HTTP_HOST} ^([^.]+)\.
  RewriteCond %{REQUEST_URI}::%1 !^/([^/]+).*::\1
  RewriteRule ^(.*)$ /%1/$1 [L]
</VirtualHost>

The subdomain.example.com can just be any subdomain that isn't www.example.com. For any request that doesn't start with "www", the subdomain is captured as a group (2nd condition), then the next line makes sure the request isn't already being routed into the subdomain's name, and the rule routes it.

So for the request:

http://foo.example.com/bar/x.html

it gets routed to:

/foo/bar/x.html
Dvorak answered 12/9, 2013 at 9:0 Comment(1)
You can use a wildcard with a virtual document root. See Update 4 of this question: #16747513Soberminded
S
0

This is what I use with my freelancer work:

Under httpd-vhosts.conf:

UseCanonicalName Off
<VirtualHost *:${AP_PORT}>
 DocumentRoot ${US_ROOTF_WWW}/_client
 ServerName client
 ServerAlias client
 <Directory "${HOME}\www\_client">
   Require all granted
 </Directory>
</VirtualHost>

<VirtualHost *:${AP_PORT}>
 VirtualDocumentRoot "${US_ROOTF_WWW}/_client/%1"
 ServerName subdomains.client
 ServerAlias *.client
 <Directory "${HOME}\www\_client\*">
   Require all granted
 </Directory> 
</VirtualHost>

Then under the windows hosts file place the domain and subdomains that are needed.

127.0.0.1 client
127.0.0.1 someone.client
127.0.0.1 someone2.client
Soberminded answered 10/7, 2016 at 7:42 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.