Como: Escolher a aplicação e o ambiente baseado no nome de domínio

Propósito

As vezes desejamos escolher a aplicação e o ambiente que será executada baseado no nome de domínio. Isto permite que você não tenha arquivos como index.php, index_dev.php, backend.php, backend_dev.php, etc; mas tenha apenas um arquivo index.php controlando o seu projeto.

Código

index.php

<?php
define('SF_ROOT_DIR', realpath(dirname(__FILE__).'/..'));


/**
  * Verifica a existência do subdomínio admin e cria a aplicação admin
  */
if ( isset($_SERVER) &&
     is_array($_SERVER) &&
     isset($_SERVER['HTTP_HOST']) &&
     preg_match('/admin./', $_SERVER['HTTP_HOST'])
   )
{
  define('SF_APP', 'backend');
}
elseif (
         isset($_SERVER) &&
	 is_array($_SERVER) &&
	 isset($_SERVER['HTTP_HOST']) &&
	 preg_match('/telemarket./', $_SERVER['HTTP_HOST'])
       )
{
  define('SF_APP', 'telemarketer');
}
else
{
  define('SF_APP', 'public');
}


/**
  * Verifica a existência do subdomínio dev e cria o ambiente dev
  */
if ( isset($_SERVER) &&
     is_array($_SERVER) &&
     isset($_SERVER['HTTP_HOST']) &&
     preg_match('/dev./', $_SERVER['HTTP_HOST'])
   )
{
  define('SF_ENVIRONMENT', 'dev');
  define('SF_DEBUG',       true);
}
else
{
  define('SF_ENVIRONMENT', 'prod');
  define('SF_DEBUG',       false);
}


require_once(SF_ROOT_DIR.DIRECTORY_SEPARATOR.'apps'.DIRECTORY_SEPARATOR.SF_APP.DIRECTORY_SEPARATOR.'config'.DIRECTORY_SEPARATOR.'config.php');


sfContext::getInstance()->getController()->dispatch();

Uso

O arquivo acima permte que você tenha 6 diferentes nomes de domínio fazendo diferentes coisas

Cada um dos subdomínios informa qual aplicação utilizar e se carregar ou não o ambiente dev.

Obviamente, você pode adicionar mais aplicações ou mais ambientes que atendam as suas necessidades.

Aviso

Assegure-se de que você desabilitou o subdomínio dev utilizando o arquivo .htaccess ou de que você não irá utilizar este arquivo index.php no seu servidor de produção.