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;
?>