[LUAU] mod_rewrite

Tom Gordon memeyou at memeyou.net
Sun May 23 21:22:30 PDT 2004


On Sun, 2004-05-23 at 16:05, Vince Hoang wrote:
> On Sun, May 23, 2004 at 03:10:15PM -0600, Paul wrote:
> > The <VirtualHost> directive is a pain since I have to restart
> > Apache every time there is a change. I would like an option to
> > do reconfiguration dynamically and prevent restarts. I have
> > also heard that too man <VirtualHost> entries begin to really
> > slow Apache down, at least in its starts and stops.
> 
> Startup is slower because apache has to parse its ever growing
> configuration file. The alternative is running many separate
> instances of apache, so it is a small price to pay.
> 
> > Mod_Rewrite seems like a really good option, but I fail to see
> > a way to pass unique directives to each virtual host.
> 
> Mod_rewrite is a great tool, but I always keep the rewrite rules
> within each respective virtual host.
> 
> > Or has anyone found a different way to dynamically add or
> > delete virtual hosts without having to restart Apache?
> 
> With `apachectl graceful`, the parent pid rereads the
> configuration file and tells the old children to die off when
> they are done serving pages. Be sure to do an `apachectl
> configtest` beforehand because typos in the configuration file
> will cause apache to exit completely.
> 
> -Vince
From the apache cookbook online:

--snip--
Recipe 4.7: Mass Virtual Hosting Using Rewrite Rules
Problem
Although there is a module - mod_vhost_alias - which is explicitly for
the purpose of supporting large numbers of virtual hosts, it is very
limiting and requires that every virtual host be configured exactly the
same way. You want to support a large number of vhosts, configured
dynamically, but, at the same time, you want to avoid mod_vhost_alias.


Solution
Use directives from mod_rewrite to map to a directory based on the
hostname:

RewriteEngine on
RewriteCond   %{HTTP_HOST}     ^(www\.)?([^.]+)\.com$
RewriteRule   ^(.*)$   /home/%2$1
Discussion
mod_vhost_alias is useful, but it is best for settings where each
virtual host is identical in every way but hostname. Using
mod_vhost_alias precludes the use of other URL-mapping modules, such as
mod_userdir, mod_rewrite, and mod_alias, and it can be very restrictive.
Using mod_rewrite is less efficient, but it is more flexible.

For example, when using mod_vhost_alias, you must do all of your hosts
with mod_vhost_alias; whereas with this alternate approach, you can do
some of your hosts using the rewrite rules and others using conventional
virtual host configuration techniques.

The directives in the Solution map requests for www.something.com (or
without the www) to the directory /home/something.


See Also
      * Recipe 5.16 of Apache Cookbook
      * http://httpd.apache.org/docs/vhosts/
      * http://httpd.apache.org/docs/mod/mod_rewrite.html

--/snip--

you can also do this with squid/squirm in reverse... it is very very
fast, uses virtually no memory, can reread configs after sending -HUP,
uses full regex and if you mess it up, it'll still function.

-- 
Tom Gordon <memeyou at memeyou.net>
<3 the United States of America


More information about the LUAU mailing list