Redirigir URL www a no-www

Hay situaciones en las que se desea redirigir una URL que comienza por www a una sin dicho prefijo, o bien redirigir de un dominio dado a cualquier otro. Vamos a ver como realizarlo si se utiliza Apache como servidor http.

Mediante el fichero .htaccess es posible redirigir las URL www a su equivalente sin www. Se puede hacer de varias formas, una de ellas es emplear el módulo mod_rewrite, un motor de reescritura de URL basado en reglas.

Para ello sólo es necesario añadir en el .htaccess

RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.eldominio.com [NC]
RewriteRule ^(.*)$ http://eldominio.com/$1 [L,R=301]

Descripción de los flags empleados

De la documentación de Apache:

El uso del flag NC (nocase) fuerza a que la regla indicada se aplique de forma insensible a mayúsculas o minúsculas.

El flag L (last) hace que mod_rewrite deje de procesar el conjunto de reglas.

Finalmente el flag R indica que se debe emitir una redirección, la sintaxis R=código se puede emplear para especificar el código de respuesta.

La documentación no recomienda utilizar mod_rewrite para este proposito sino la directiva Redirect proporcionada por mod_alias. Existen más supuestos en los que se recomienda evitar utilizar mod_rewrite.

Para conseguir lo mismo a traves de la directiva Redirect debemos editar el fichero donde esté definido el VirtualHost y añadir un nuevo VirtualHost con el dominio no deseado. En este nuevo VirtualHost es donde emplearemos la directiva Redirect:

<VirtualHost *:80>
    ServerName www.origen.com
    Redirect 301 / http://destino.com/
</VirtualHost>

Es importante no olvidar el Slash final en la dirección de destino. La directiva Redirect preserva el resto del path

Remember that Redirect preserves path information. That is to say, a redirect for a URL /one will also redirect all URLs under that, such as /one/two.html and /one/three/four.html.

Esta opción es más sencilla y rápida que la version con mod_rewrite pero no siempre tenemos la posibilidad de editar la configuración de apache.