Prevenir Hotlink desde .htacess

   Vagando por la web entre servidores y servicios, me encuentro con que mucha gente tiene problemas con el "Hotlink", para entendidos de la materia sabrán lo que significa, para los que no vamos a ello.


   El Hotlink, o también conocido HotLinking, es un término muy utilizado en la red, el cual consiste en utilizar una imagen en un servidor X mientras esta es cargada desde otro servidor Y, tomando el ancho de banda del servidor Y en vez del X. En pocas palabras, Hotlink es utilizar imágenes de otras personas desde sus servidores sin hacer una copia y utilizar esa copia desde nuestro propio servidor.

   Bien, ahora que sabemos esto viene la gran pregunta... ¿Cuál es el problema?, todo tiene su lado positivo y su lado negativo, comencemos entonces por el negativo, los principales puntos son los siguientes:

 - Te quita ancho de banda sin que te enteres, por lo que si tienes un servidor contratado con cierto límite puede que ocupes el máximo de una forma muy rápida y notoria.

 - Imágenes que hiciste tu mismo nadie las agradecerá, mucha gente toma la imagen, la utiliza y ni se molesta en decir que es de otro sitio.

   Aunque se pueden nombrar más, digamos que esto es lo básico, entonces para evitar esto podemos comenzar por editar nuestro archivo .htaccess (el archivo .htaccess), y comenzamos a editar las reglas básicas, primero que todo habilitamos el sistema de "Escritura de Reglas":

RewriteEngine On

   Es importante que esto este justo en la primera línea, antes de comenzar el resto de las opciones. Ahora vamos con las reglas. Lo primero que hay que destacar es que en la web existen muy buenos ejemplos, como lo es el siguiente: Evitar Hotlink (tengoun.com.ar). Sin embargo, es muy tedioso ya que no se acortan condiciones y nuestro archivo puede ser muy extenso, para ello podemos utilizar dichas condiciones y ahorrarnos mucho trabajo, por ejemplo:

RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?misitio.com [NC]
RewriteRule \.(jpe?g|png|gif|bmp)$ - [F]

   Aunque parezca complicado, es simple de entender, por ejemplo:

 - http(s)? indica que aplicará para ambos protocolos (http y https).
 - (www.\)? significa que la regla aplica para el dominio con o sin www.
 - (jpe?g| es para indicar que la 'e' será condicional, por lo que aplicará para jpg y jpeg.
 - [NC] quiere decir NoCase, lo que quiere decir que comprobará tanto mayúsculas como minúsculas.

   Como vemos, el que nos ahorra el trabajo es el signo de interrogación (?), y valla que nos ayuda, la condicional [F] es para indicar un error al navegador y cortar la conexión, a modo que no se mostrara ninguna imagen a menos que esta sea cargada del dominio especificado.

   Hasta ahora hemos visto lo negativo y como evitarlo, pero también hay que verle el lado positivo, y es que esto nos generará (consiente o inconscientemente) tráfico desde otros sitios, quiera o no el que esté utilizando nuestras imágenes, siendo un aspecto muy positivo a nuestro favor. Para ello solo debemos modificar un poco nuestro archivo, de modo que la línea final queda mas o menos de la siguiente forma:

RewriteRule \.(jpe?g|png|gif|bmp)$ http://misitio.com/imagen/archivo.ext [NC,R,L]

   De esta forma en vez de simplemente cortar la conexión, el mostrará la imagen especificada en nuestra ruta definitiva (recordando cambiar .ext por la extensión, como png o jpg). Así mismo podemos agregar mas sitios, como los feeds (rss), blogs u otras redes a las que les permitamos el acceso a nuestras imágenes. Nuestro archivo final vendría quedando mas o menos de la siguiente manera:
RewriteEngine On

#Enlaces permitidos

RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?misitio.com [NC]
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?google.com/reader/view [NC]
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?feedburner.google.com [NC]

#Bloqueo de imagenes

RewriteRule \.(jpe?g|png|gif|bmp)$ http://misitio.com/imagenes/no_al_hotlink.jpg [NC,R,L]

   Recordemos que podemos agregar mas archivos, por ejemplo (jpe?g|png|gif|bmp|css|xml|swf|tga|etc....etc....etc)

   NOTA: es importante aclarar que la imagen que mostraremos no debe estar dentro de los archivos a los cuales se les aplica la regla, o terminaremos haciendo un loop (ciclo) infinito de peticiones al servidor provocando un error en la carga.


Lamentablemente hay muchos usuarios en la red que han llegado al blog para escribir obscenidades, así que la moderación se hace necesaria. Recuerda utilizar un lenguaje correcto y espera a que sea aprobado.

Si necesitas publicar código haz click en "Conversión" para hacerlo legible.
ConversiónConversión