Switching server environments
After reading John Rockefeller’s post on Handling multiple domains and less recently Richard Heye’s post on displaying errors, I thought I’d write a little post about my qualms with their methods.
I won’t go into too much detail, but both examples use a variable that can be manipulated by the user, $_SERVER[‘HTTP_HOST’]. Richard actually changed his example to use $_SERVER[‘SERVER_NAME’], but as Chris Shiflett shows, neither are guaranteed to be genuine.
My example relies on having access to the server configuration, but is fairly simple. I think Ruby on Rails uses a similar method.
First we set up our virtual hosts, all pointing to the same codebase, but each getting an individual environment variable set using mod_env.
<VirtualHost *:80>
ServerName davedevelopment.co.uk
DocumentRoot /var/www/codebase
SetEnv WEB_ENV davedevelopment.co.uk
</VirtualHost>
<VirtualHost *:80>
ServerName test.davedevelopment.co.uk
DocumentRoot /var/www/codebase
SetEnv WEB_ENV test.davedevelopment.co.uk
</VirtualHost>
<VirtualHost *:80>
ServerName anotherSite.com
DocumentRoot /var/www/codebase
SetEnv WEB_ENV another_site
</VirtualHost>
The code then switches on this variable, which should be guaranteed to be controlled by yourself?
<?php
switch($_SERVER['WEB_ENV']) {
case 'davedevelopment.co.uk':
$message = 'Welcome to DaveDevelopment';
break;
case 'another_site':
$message = 'Welcome to another site';
break;
case 'test.davedevelopment.co.uk':
default:
$message = 'Welcome to DaveDevelopment Test';
break;
}
echo $message;
?>
About
Dave Marshall is a Software Engineer living near Hull, England. He works on various personal projects and is the Technical Manager at Childcare.co.uk
Dave specialises in web application development for the LAMP stack, but always tries to choose a tool set that is most fit for purpose.
Dave is a Zend Certified Engineer and a Member of the British Computer Soceity.