httpd-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Jason Nunnelley <ja...@jasonn.com>
Subject [users@httpd] Apache regex config for mass redirects
Date Tue, 06 Apr 2010 19:13:59 GMT
The goal: to provide for three kinds of applications and application
structures (file structure driven here, so you don't have to understand
what the applications are or do to understand what I'm trying to
accomplish) in a single front end configuration.

All app servers share same front ends, so they need to share the same
Apache configuration.  So, this is just like one host, one Apache
config, one IP. It's complex, but it's actually quite simple once it
resolves. The file location is universal, so the apache config would
work on a single host as well as a HAProxy fronted application server.

1st, I have some specified domains which require me to add them to the
config and then perform an apache graceful (restart). The goal here is
to get away from the requirement to do a restart by using a redirect or
reroute file for each of the potential domain names.

# Single app shared space domains based on domain1
RewriteCond %{REQUEST_URI} !^/icons/
RewriteCond %{SERVER_NAME} ^(.*)?\.?(domain1|domain2|domain3)\.(com|net)$
RewriteCond "/mnt/www/domain1_files/maintenance.html" -f
RewriteCond %{SCRIPT_FILENAME} !"/mnt/www/domain1/maintenance.html"
RewriteCond %{SCRIPT_FILENAME} !^(.+).(gif|png|jpg|css|js|swf)$
RewriteRule ^.*$ "/mnt/www/domain1/maintenance.html" [L]
RewriteCond %{REQUEST_URI} !^/icons/
RewriteCond %{SERVER_NAME} ^(.*)?\.?(domain1|domain2|domain3)\.(com|net)$
RewriteRule ^/(.*)$/mnt/www/domain1/public_html/$1 [L]

So, notice that I'm testing for a particular set of domains, then
pushing any domain that matches the list to a file location. In this
case they all share domain1's file source, since it handles all the
sites that are of like kind. Our application parses the domain based on
how Apache receives the request - so domain2.com is handled by
domain1.com's file system and app but the database spits back its
discrete content.

All these domains are managed by the same software, so they use the same
file system location. Instead of pushing them to discrete file system
locations like those below (which go to file/named/after/domain/public_html)

Here's how I serve my directory based websites:

# Production Discrete Sites
RewriteCond %{REQUEST_URI} !^/icons/
RewriteCond /mnt/www/production/www.%{SERVER_NAME} -d
RewriteRule ^/(.*)$http://www.%{SERVER_NAME}/$1 [L]
RewriteCond %{REQUEST_URI} !^/icons/
RewriteRule ^/(.*)$
/mnt/www/production/${lowercase:%{SERVER_NAME}}/public_html/$1 [L]

I have two or three of the situations above, where application servers
run different apps. What I'm trying to figure out is how to redirect
them based on a redirect file as they come in as an apache server request.

Here's an example of a rewrite rule that works for redirecting to an
URL. What I need to do is redirect to a file location to serve the
website's application/files.

# Setup redirect map
RewriteMap redirects txt:/mnt/www/.redirect_map
RewriteMap lowercase int:tolower
RewriteCond %{REQUEST_URI} !^/icons/
RewriteCond ${redirects:%{SERVER_NAME}|notfound} !^notfound$
RewriteCond %{REQUEST_URI} !^/$
RewriteRule ^(/.*)$http://${redirects:%{SERVER_NAME}}$1 [L]
RewriteCond %{REQUEST_URI} !^/icons/
RewriteCond ${redirects:%{SERVER_NAME}|notfound} !^notfound$
RewriteRule ^/$http://${redirects:%{SERVER_NAME}} [L]

What's I'm trying to do is combine the best of three processes. I'd like
to add a redirect/cond to send URL requests to an app or file location
based on the redirect map.

So, instead of a redirect map that looks likes this:

domain1  domain1.com
domain2 domain2.com/domain2content

I'd like to do something more like this:

domain1 /mnt/www/domain1.com
domain2 /mnt/www/domain1.com
domain3 /mnt/www/domain3.com

And so forth.

The goal here is to automate things and cut down on apache restarts.
Also, I intend to leave the redirect rule that sends all remaining
www.domain  requests to thewww.$DOMAIN  file location for that website's
discrete application files.


Opinions, ideas, etc. are solicited.



-- 

Jason A. Nunnelley
http://www.google.com/profiles/imjasonn


Mime
View raw message