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

Canales RSS

Lo más fresco

  1. Bookmarklets Nuevo
  2. Recetario básico para CakePHP/2 Nuevo
  3. Certificado auto-firmado Nuevo

Sugerencias del chef

Lo más visitado

  1. Fecha y hora
  2. Dar formato a un número
  3. Reiniciar secuencia
  4. Vaciar un esquema
  5. Certificado auto-firmado
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,NE,R=301,L]

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,NE,R=301,L]

Un par de notas

Historial

v2015-04-02
Agregar flag [NE] para conservar las rutas originales.
Simplificar algunas reglas y no usar expresiones regulares en vano.
v2009-11-22
Primera versión.

Esta página ha sido impresa el sábado 23 de septiembre de 2017 (02:23:55 +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-2017 by Álvaro González (alvaro.es) • Burgos (España) • borrame.com