hunchentoot-vhost
Copyright (c) 2007 Cyrus Harmon
See LICENSE file for details

This package is for implementing so-called virtual hosts in a
mechanism similar to that of hunchentoot's easy-handlers.

Hunchentoot-vhost provides a "virtual host" mechanism such that a
single server (which listens on a single port, as is the Hunchentoot
design) can serve different content depending on the host name used in
the http request so that, for example, http://host1.bogus.com/ and
http://host2.bogus.com/ could serve up different pages.

Features:

* Multiple names for a given host -- A single virtual host can handle
  multiple host names such that, for instance, http://www.bogus.com/
  and http://bogus.com can point to the same page.

* Shared across multiple hunchentoot servers -- While a single
  hucnhentoot server listens on a single port, one often runs multiple
  servers in a single process, especially for the common case of a
  server listening for HTTP requests on one port and HTTPS requests on
  another port. hunchentoot-vhost virtual hosts can be shared across
  multiple servers (within a single lisp process, of course)

To create a virtual host, ues the make-virtual-host function:


  (defparameter *localhost-host*
    (hunchentoot-vhost:make-virtual-host "localhost"
                                         '("localhost"
                                           "127.0.0.1")


This creates the *localhost-host* virtual host, which can listen for
hunchentoot requests with host "localhost" or 127.0.0.1.

In order to tell the hunchentoot:server that it should listen for
requests to this virtual host, one calls the
hunchentoot-vhost::add-virtual-host funciton:


  (hunchentoot-vhost::add-virtual-host *localhost-host* server)


In order for the hunchentoot-vhost to field requests, one adds
functions to the hunchentoot-vhost::dispatch-table of the virtual-host
object. For instance:

  
  (pushnew (lambda (request &optional vhost)
             (declare (ignore vhost))
             (really-dispatch-this-request request))
           (hunchentoot-vhost::dispatch-table host) :test #'equal)

  
which would call really-dispatch-this-request in response to a request
to this virtual host.