Error: Failed to load processor TracNav
No macro or processor named 'TracNav' found

Simple Virtual-Hosting

Module: mod_simple_vhost

Description

Simple assumption:

Every virtual host is in a directory below a base directory in a path that is the same as the name of the vhost. Below this vhost path might be an extra directory which is the document root of the vhost.

The document root for each vhost is built from three values:

  • server-root
  • hostname
  • document-root

The complete document root is constructed either by

server-root + hostname + document-root

or if this path does not exist by

server-root + default-host + document-root

A small example should make this idea clear:

/var/www/
/var/www/logs/
/var/www/servers/
/var/www/servers/example.org/
/var/www/servers/example.org/lib/
/var/www/servers/example.org/pages/
/var/www/servers/mail.example.org/
/var/www/servers/mail.example.org/lib/
/var/www/servers/mail.example.org/pages/

simple-vhost.server-root = "/var/www/servers/"
simple-vhost.default-host = "example.org"
simple-vhost.document-root = "pages"

You can use symbolic links to map several hostnames to the same directory.

Conditionals vs. simple-vhost

You have to keep in mind that conditionals and simple-vhost interfere with one another.

simple-vhost.server-root = "/var/www/servers/"
simple-vhost.default-host = "example.org"
simple-vhost.document-root = "pages"

$HTTP["host"] == "news.example.org" {
  server.document-root = "/var/www/servers/news2.example.org/pages/"
}

When news.example.org is requested, the server.document-root will be set to /var/www/servers/news2.example.org/pages/, but simple-vhost will overwrite it shortly afterwards.

If /var/www/servers/news.example.org/pages/ exists, that will be used. If not, /var/www/servers/example.org/pages/ will be taken because it is the default.

To use conditionals together with simple-vhost, you should do this:

$HTTP["host"] != "news.example.org" {
  simple-vhost.server-root = "/var/www/servers/"
  simple-vhost.default-host = "example.org"
  simple-vhost.document-root = "pages"
}

$HTTP["host"] == "news.example.org" {
  server.document-root = "/var/www/servers/news2.example.org/pages/"
}

It will enable simple vhosting for all hosts other than news.example.org.

Options

simple-vhost.server-root
root of the virtual host
simple-vhost.default-host
use this hostname if the requested hostname does not have its own directory
simple-vhost.document-root
path below the vhost directory

Tips

Make sure mod_simple_vhost is the first mod in 'server.modules' list,when you are using mod_simple_vhost with mod_cache and mod_proxy.

You can configure a virtual host with multiple domain names by using 'or' syntax such as:

$HTTP["host"] =~ "^(hosta\.example\.org|hosta\.example\.net)$" {
  ... virtualhost configuration here ...
}

WWW

You do not need to use two entries for foobar.com and www.foobar.com. The following syntax will act as a catch all for both foobar.com and www.foobar.com:

$HTTP["host"] =~ "(^|\.)foobar\.com$" {
  ...
}