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

Canales RSS

Lo más fresco

  1. Reemplazar selección con JavaScript Nuevo
  2. ¿Esta IP pertenece a esta red? Modificado
  3. Mozilla Firefox Modificado

Sugerencias del chef

Lo más visitado

  1. Fecha y hora
  2. Dar formato a un número
  3. Rotar logs en Windows
  4. Eliminar formato en Excel
  5. Caché del navegador
Compartir esta página

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 lunes 21 de mayo de 2012 (03:05:23 +0200) 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-2011 by Álvaro G. Vicario (alvaro.es) • Burgos (España) • borrame.com