<dtml-var manage_page_header>
<dtml-var manage_tabs>

<h3>The Virtual Host Monster supports virtual hosting</h3>
<p class="form-help">
It changes the protocol, host, and/or path of URLs generated by Zope.
Values affected include REQUEST variables starting with URL or BASE 
(such as URL1, BASE2, URLPATH0), and the absolute_url() methods of
objects.  By changing these, the Virtual Host Monster allows you to
host several different domains in a single Zope.
</p>
<p class="form-help">
The most common sort of virtual hosting setup is one in which you
create a Folder in your Zope root for each domain that you want to
serve.  For instance <strong>http://www.buystuff.com</strong> is
served from Folder /buystuff.com while
<strong>http://www.mycause.org</strong> is served from /mycause.org.
</p>

<h3>One is enough</h3>
<p class="form-help">
A single Virtual Host Monster in your Zope root can handle all of your
virtual hosting needs.  It doesn't matter what Id you give it, as long
as nothing else in your site has the same Id.
</p>

<h3>You must add special names in the path</h3>
<p class="form-help">
The VHM doesn't do anything unless it sees one
of the following special path elements in a URL: 
<em>VirtualHostBase</em> sets the protocol and host, while 
<em>VirtualHostRoot</em> sets the path root.</p>

<p class="form-help">
If the URL path of a request begins with 
&quot;/VirtualHostBase/http/www.buystuff.com&quot;, for instance, then 
URLs generated by Zope will start with
<strong>http://www.buystuff.com</strong>.
Since the port number was not specified, it is left unchanged.  If
your Zope is running on port 8080, and you want generated URLs not to
include this port number, you must use
&quot;/VirtualHostBase/http/www.buystuff.com:80&quot;.
</p>

<p class="form-help">
If the URL contains <em>VirtualHostRoot</em>, then 
all path elements up to that point are removed from generated URLs. 
For instance, a request with path &quot;/a/b/c/VirtualHostRoot/d&quot; 
will traverse &quot;a/b/c/d&quot; and then generate a URL with
path <strong>/d</strong>. 
</p>

<h3>You add these names by rewriting incoming URLs</h3>
<p class="form-help">
Visitors to your site don't see these special names, of course.
You insert them into the path using either an external rewriter,
such as an Apache RewriteRule or ProxyPass directive, or by
setting up a mapping on the &quot;Mappings&quot; tab.
</p>  

<p class="form-help">
For example, suppose Zope is running on port
8080 behind an Apache running on port 80.  You place a Virtual Host
Monster in the Zope root Folder, and use Apache to rewrite &quot;/(.*)&quot;
to <strong>http://localhost:8080/VirtualHostBase/http/www.buystuff.com:80/buystuff.com/VirtualHostRoot/$1</strong>.
</p>

<p class="form-help">
You could get the same effect in a standalone Zope by adding the line
<code>www.buystuff.com/buystuff.com</code> to the &quot;Mappings&quot;
tab.  In either case, requests for
<strong>http://www.buystuff.com/anything</strong>
will look for Zope object <strong>/buystuff.com/anything</strong>.
</p>

<p class="form-help">
You should only use the &quot;Mappings&quot; tab for simple virtual
hosting, in a Zope that is serving requests directly.  Each mapping
line is a host name followed by a path to a Folder.  The VHM checks
the host specified in each incoming request to see if it is in the
list.  If it is, then the corresponding path is inserted at the start
of the path, followed by &quot;VirtualHostRoot&quot;.
</p>
<p class="form-help">
You can match
multiple subdomains by putting &quot;*.&quot; in front of the host
name, as in &quot;*.buystuff.com&quot;.  If an exact match exists, it
is used instead of a wildcard match.
</p>

<h3>Inside-out hosting</h3>

<p class="form-help">
Another use for virtual hosting is to make Zope appear to be part of a
site controlled by another server.  For example, Zope might only serve
the contents of <strong>http://www.mycause.org/dynamic_stuff</strong>.
To accomplish this, you want to add &quot;dynamic_stuff&quot; to the
start of all Zope-generated URLs.
</p>
<p class="form-help">
If you insert <em>VirtualHostRoot</em>, followed by one or more path elements
that start with '_vh_', then these elements will
be ignored during traversal and then added (without the '_vh_') to the
start of generated URLs. 
For instance, a request for &quot;/a/VirtualHostRoot/_vh_z/&quot; 
will traverse &quot;a&quot; and then generate URLs that start with
<strong>/z</strong>.
</p>
<p class="form-help">
In our example, you would have the main server send requests for
<strong>http://www.mycause.org/dynamic_stuff/anything</strong>
to Zope, rewritten as
<strong>/VirtualHostRoot/_vh_dynamic_stuff/anything</strong>.
</p>
<dtml-var manage_page_footer>
