borrame.com - Colección particular de recortes de código y documentación para programación web

Lo más fresco

  1. LPAD en SQL Server Nuevo
  2. Eliminar todos los objetos en SQL Server Modificado
  3. Dominio principal Nuevo
  4. Eliminar formato en Excel Nuevo

Sugerencias del chef

Lo más visitado

  1. Dar formato a un número
  2. Campo autonumérico
  3. Fecha y hora
  4. Cookies
  5. Convertir IP entre cadena y número

Dominio principal

Por dominio principal (o dominio canónico) entendemos aquel nombre de dominio oficial con el que publicitamos una web, independientemente de que ésta sea accesible a través de otros dominios o subdominios. Si el visitante llega a través de un dominio secundario suele ser interesante redirigirle al principal: las cookies se asignan a un único dominio, los buscadores no se confunden pensando que son sitios distintos, se da una mejor imagen y el mundo es un lugar mejor.

Veamos un par de formas de hacerlo mediante Apache.

RedirectPermanent

La forma óptima de redirigir es crear un sitio web virtual para los dominios alternativos y utilizar la directiva RedirectPermanent para enviar al dominio principal:

#
# Dominios secundarios
#
<VirtualHost *:80>
    ServerName example.com
    ServerAlias example.net www.example.net
    ServerAlias example.org www.example.org
   
    RedirectPermanent / http://www.example.com/
</VirtualHost>


#
# Definición del sitio web
#
<VirtualHost *:80>
    ServerName www.example.com
   
    DocumentRoot /home/foo/htdocs
    # ...
</VirtualHost>

Lamentablemente esto sólo es factible cuando administramos nuestro propio servidor: en un archivo .htaccess no podemos definir un VirtualHost y no tenemos una forma sencilla de poner condiciones a la redirección.

mod_rewrite

En cambio, casi siempre podemos utilizar mod_rewrite. A nivel de rendimiento es matar moscas a cañonazos pero si no queda otra... Estas directivas se pueden usar en un archivo .htaccess y los más paranoicos las pueden insertar entre <IfModule mod_rewrite.c> y </IfModule> para evitar el temible error 500 si el servidor no dispone de mod_rewrite.

Enfoque «redirigimos si...»

Redirigimos si y sólo si accedemos desde una serie determinada de dominios (útil si usamos el mismo .htaccess para desarrollo y producción).

RewriteEngine On


#
# Redirigimos al dominio principal
#
RewriteCond %{HTTP_HOST} ^(www\.)?example\.net$ [NC,OR]
RewriteCond %{HTTP_HOST} ^(www\.)?example\.org$ [NC,OR]
RewriteCond %{HTTP_HOST} ^example\.com$ [NC]
RewriteRule ^.*$ http://www.example.com/$0 [NC,L,R=301]

Enfoque «redirigimos si no...»

Redirigimos si accedemos desde cualquier dominio que no sea el principal (útil en el resto de casos).

RewriteEngine On


#
# Redirigimos al dominio principal
#
RewriteCond %{HTTP_HOST} !^www\.example\.com$ [NC]
RewriteRule ^.*$ http://www.example.com/$0 [NC,L,R=301]

Un par de notas

Esta página ha sido impresa el jueves 11 de marzo de 2010 (20:54:02 +0100) desde http://borrame.com/recortes/apache/dominio-principal.html. La última vez que miré contenía HTML válido con CSS fresquito y si tiene flatas de ortografía ha sido sin querer.

borrame.com es el sitio anteriormente conocido como bits.demogracia.com (no confundir con Demogracia, que sólo pasaba por ahí).

© 2005-2010 by Álvaro G. Vicario (alvaro.es) • Burgos (España) • borrame.com