Lo primero que necesitamos es tener algunos conocimeintos basicos de:
¿Que es un Subdominio?
http://es.wikipedia.org/wiki/Subdominio
¿Que es un Servidor Dns.?
http://es.wikipedia.org/wiki/Domain_Name_System
Sistema de nombres de dominio o DNS: es un sistema que se creo con la finalidad de hacer mas claro el internet para todos, antes para accesar a una pagina web habia que poner la direccion ip del servidor al que nos queriamos conectar, por supuesto esto hacia muy dificil recordar de que era esa pagina e inclusive cual era su ip, para evitar esos problemas se crearon los DNS que son nombres de dominios que estan asociados a una direccio ip y de esta manera se facilita la compresion y uso de las paginas web.
Todos sabesmos que las url de una pagina siempre tienen una estructura parecida a esta:
www.google.com
- www: subdominio
- google: nombre de dominio
- com: dominio de nivel superior
<VirtualHost *> ServerAdmin webmaster@ejemplo.com ServerAlias subdominio.ejemplo.com DocumentRoot /var/www/subdominio.ejemplo.com <Directory /> Options FollowSymLinks AllowOverride None </Directory> <Directory /var/www/subdominio.ejemplo.com> Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all # Uncomment this directive is you want to see apache2's # default start page (in /apache2-default) when you go to / #RedirectMatch ^/$ /apache2-default/ </Directory> ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ <Directory "/usr/lib/cgi-bin"> AllowOverride None Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch Order allow,deny Allow from all </Directory> ErrorLog /var/log/apache2/subdominio.ejemplo.com.log # Possible values include: debug, info, notice, warn, error, crit, # alert, emerg. LogLevel warn CustomLog /var/log/apache2/subdominio.ejemplo.com.log combined ServerSignature On </VirtualHost>
Donde dos cosas importantes para destacar son el ServerAlias y DocumentRoot, con el ServerAlias especificamos el nombre del subdominio y con el DocumentRoot espcificamos la ruta que debe accesar para buscar el subdominio,
Aparte de la configuracion en el apache debemos agregar en nuestro servidor DNS una entrada "A" con la ruta completa del subdominio y la direccion ip de nuestro mismo servidor, con estas dos cosas ya tenemos un subdominio creado en nuestro servidor. Ya si entramos en el subdominio deberia salirnos lo que tenemos en la ruta especificada.
Ahora bien si queremos hacer multiples subdominios con php, debemos seguir los paso anterirores pero con algunas diferencias, la primera es que al agregar el host al pache hay que poner en el Server alias en ves del subdominio poner *, queda asi:
ServerAlias *.ejemplo.comY en la entrada "A" Del servidor dns en ves de poner
subdominio.ejemplo.com, colocar *.subdominio.ejemplo.com, con esto ya tenemos todos los subdominios de nuestro servidor apuntando a DocumentRoot, ahora bien para manejarlos ya esto queda de parte de php, Podemos crear un nuevo proyecto con codeginiter o dejarlo en con el que ya hemos estado trabajando, lo que hay que hacer es que en el controlador por defecto agregar las siguientes lineas: function _remap($method)
{
if($_SERVER['SERVER_NAME']!= 'localhost' && $_SERVER['SERVER_NAME'] != '127.0.0.1')
{
$array = explode('.',$_SERVER['SERVER_NAME']);
if($array[0]!='www')
{
$method=$array[0];
}
elseif($array[0]=='www')
{
$method=$array[1];
}
}
switch ($method)
{
case 'index':
$this->index();
break;
default:
$ths->lo que queramos.
}
}Lo que hacemso es si es el servidor local carga el metodo tal cual como esta escrito si no es el servidor local pues estrae el subdominio y lo pasa como metodo, ya despues nosotros dentro del swicth podemos crear diferentes metodos a nuestor antojo y de esa maneja generar los subdominios dinamicos como queramos.
Si trabajamos con hmvc pues se nos hace la vida un poco mas facil ya que no tenemos que crear el metodo dnetro de el archivo del controlador sinoq ue lo hacemos aparte con lo cual nuestro codigo es mas facil de entender y todo se encuentra mejor organizado, solo deberiamso agregar:
$this->load->module('empresa');
$this->empresa->index($method);