sábado, 2 de enero de 2010

urls www y htaccess

Como seguramente habrán podido comprobar entre los millones de sitios en que navegan diariamente, Algunos usan nombres de dominio con WWW y otros sitios sin WWW. En la actualidad, al no ser necesario utilizar el prefijo www, para resolver paginas, se gana en comodidad y sencillez; es más fácil recordar google.com que www.google.com. 


Por eso se ha generalizado la adopción de nombres de dominio sin WWW. Sin embargo generalmente ambos dominios coexisten, con y sin WWW, resuelven correctamente el sitio en cuestión. Esto es porque ambas opciones apuntan correctamente a la IP donde este el sitio hospedado (delegación A)


Esta situación trae aparejada un pequeño problema que podemos resolver fácilmente gracias a la ayuda del fichero htaccess. El problema es que el gran Google, toma dominios con y sin WWW como entes independientes, entonces puede posicionar de una forma a el dominio con WWW y de otra al domino sin, obviamente el contenido se tomara como duplicado puesto que sería idéntico.


Pero no desesperar la solución a este inconveniente es de lo más simple, solo es necesario añadir al htaccess las siguientes lineas


Options +FollowSymlinks
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,NC,L]



Analicemos el código por partes. 


La primera linea "Options +FollowSymlinks" le "dice" a apache que debe seguir todos los enlaces simbólicos,independientemente de si estemos o no utilizando enlaces simbólicos, esta instrucción aumentara el rendimiento del servidor, puesto que no se efectuara la comprobación de si un enlace es o no simbólico. Si no sabes que es un enlace simbolico puedes tomarte solo 3 minututos para averiguarlo en wikipedia Enlace Simbolico - Wikipedia. 


La segunda linea ya creo que todo el mundo la conoce "RewriteEngine on" se encarga de poner en marcha el motor de reescritura. 
La tercera linea comienza a realizar la magia en si, establece bajo que condición se va a redirigir la URL ingresada. %{HTTP_HOST} es una variable de entorno de apache que contiene la url del HOST y ^www\.(.*) es la expresión regular que establece de echo bajo que condición deberá efectuarse la re dirección. 
La cuarta linea se encarga de realizar la re dirección en si. 


En las lineas 3 y 4 vemos algunas instrucciones adicionales encerradas entre corchetes [ ], estas instrucciones nos ayudan a simplificar aspectos de la expresión regular y aportar funcionalidad extra. por ejemplo [NC] ( no case ) hace que la instrucción no diferencia entre mayúsculas y minúsculas. R=301 indica que la redirección debe ser de tipo 301, es decir, que la paguina se mueve definitivamente a la nueva dirección, gracias a estas indicaciones los robots pueden mover el pagerank y los backlinks a la nueva dirección, por tanto todo trabajo de posicionamiento que se aya realizado sobre el sitio se conserva.  


Espero que a alguien le haya sido de ayuda :) se que no entro en muchos detalles aunque si si me expandí un poco mi idea era solo postear el codigo y me he ido por las ramas, cualquier duda, pueden usar los comentarios. Saludos !!. 

4 comentarios:

Unknown dijo...

Saludos!

Y como seria para evitar las duplicidades de www.dominio.com y www.dominio.com/index.html

Gracias de antemano!! :D

Javier dijo...

Hola, gracias por la aportación. Una pregunta: Mi archivo htaccess ya contiene la linea "RewriteEngine on" al inicio del archivo, seguido de otras cosas. Al usar estas instrucciones para evitar el WWW, ¿debo volver a escribir nuevamente la linea "RewriteEngine on"?

Unknown dijo...

Yo lo tengo puesto así yme funciona, sin volver con el RewriteEngine on

RewriteEngine on
RewriteCond %{HTTP_HOST} !^www\.tudominio\.com
RewriteRule (.*) http://www.tudominio.com/$1 [R=301,L]

Saludos!

Néstor dijo...

bueno, explicitamente, para redireccionar de un sitio sin www a uno con www, cómo seria el htaccess?

me confundio esa parte