Evitar Hotlink mediante htaccess

¿Qué es Htaccess?

de glosario informático:

es un archivo de configuración en un servidor Web, y contiene comandos en el lenguaje del servidor que le indican cómo debe comportarse en ciertas situaciones. Alguno de los usos más comunes de un archivo htaccess son la restricción del acceso a determinados archivos o carpetas en Internet (o en una intranet) mediante el uso de contraseñas. Adicionamente, los htaccess se usan para redirigir usuarios automáticamente, para bloquear o permitir el acceso al servidor a ciertas direcciones de IP, y para llamar páginas de error customizadas en lugar de las páginas de error 404 standard del servidor. Los servidores Web Apache, y otros servidores que cumplimentan las normas del NCSA pueden usar htaccess.

Como estos días me di cuenta que estaba sufriendo el tan odiado Hotlink me he puesto a averiguar algo mas sobre el tema y ver que podía hacer para evitarlo, antes tenía 100000Gb de transferencia, ahora solo 30, y si no los cuido podría estar caído a mitad de mes el blog y no es lo que quiero.

Entre la infinidad de utilidades que se le puede dar a un archivo htaccess – parece mentira que un fichero de texto plano pueda hacer tantas maravillas – están las mas usadas por los que usamos WordPress que es la modificación de la estructura de los permalinkhacer redireccionesbanear comentaristas insoportables , parar el hotlink de imágenes, entre otras.

Antes de editar el htaccess a mano, he probado con plugins para -supuestamente- evitar el hotlink pero nada me sirvió, ¿por que?, ni idea, pero el asunto es que nada de eso me servía.

Voy a tratar de ir juntando varias utilidades en relación al htaccess, pero en este artículo voy a contar lo que hize yo y me fue útil para parar el hotlink ya que podría servirle a varios que estuvieron -o están como yo estuve- , como es el caso de Cecilia.

Por defecto, este era mi htaccess:

1
2
3
4
5
6
7
<ifmodule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</ifmodule>

Que solo esta configurado para que modifique las urls del tipo:

http://tengoun.com.ar/?p=1

a el formato:

http://tengoun.com.ar/nombre-del-post/categoría/mes/año/

Para evitar el hotlink de todos los sitios, o sea, que no se vea una imagen alojada en nuestro servidor en ningún lado debemos agregar esto a nuestro htaccess:

1
2
3
4
5
6
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://tusitio.com$ [NC]
RewriteCond %{HTTP_REFERER} !^http://tusitio.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.tusitio.com$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.tusitio.com/.*$ [NC]
RewriteRule .*\.(gif|jpg|jpeg|png|bmp)$ - [F,NC,L]

(reemplazar tusitio.com por la url de tu sitio)

Estas lineas de código dicen que ningún fichero del tipo gif, jpg, jpeg, png o bmp puedan visualizarse desde cualquier otro sitio.

He aquí el problema, si denegamos el acceso a las imagenes alojadas en nuestro servidor a todas las url`s los lectores desde google reader (por ejemplo) no podrán visualizarlas.Por eso, y como somos buenas personas, tenemos que hacer una lista de sitios donde se visualizarán las imagenes, en este caso, vamos a permitir el acceso solamente a google reader.
Nos debería quedar así:

1
2
3
4
5
6
7
8
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://tusitio.com$ [NC]
RewriteCond %{HTTP_REFERER} !^http://tusitio.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.tusitio.com$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.tusitio.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.google.com/reader/view/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.google.com/reader/m/view/.*$ [NC]
RewriteRule .*\.(gif|jpg|jpeg|png|bmp)$ - [F,NC,L]

Pueden seguir agregando Url´s a la lista blanca, aquí un ejemplo, agregando a Planetaki, bloglines y feedburner:

1
2
3
4
5
6
7
8
9
10
11
12
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://tusitio.com$ [NC]
RewriteCond %{HTTP_REFERER} !^http://tusitio.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.tusitio.com$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.tusitio.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.google.com/reader/view/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.google.com/reader/m/view/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.feedburner\.com$ [NC]
RewriteCond %{HTTP_REFERER} !^http://feeds.feedburner.com/urldetufeed$ [NC]
RewriteCond %{HTTP_REFERER} !^http://[^/.]\.planetaki\.com$ [NC]
RewriteCond %{HTTP_REFERER} !^http://[^/.]\.bloglines\.com$ [NC]
RewriteRule .*\.(gif|jpg|jpeg|png|bmp)$ - [F,NC,L]

Ustedes, según sus lectores seguramente sabrán mediante que lector de feed son leídosy deberían ir agregando.

Para que no queden dudas de como y donde se debe agregar el código, les dejo un ejemplo de como quedaría el mío completo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<ifmodule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://tusitio.com$ [NC]
RewriteCond %{HTTP_REFERER} !^http://tusitio.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.tusitio.com$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.tusitio.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.google.com/reader/view/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.google.com/reader/m/view/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://[^/.]\.feedburner\.com$ [NC]
RewriteCond %{HTTP_REFERER} !^http://feeds.feedburner.com/urldetufeed$ [NC]
RewriteCond %{HTTP_REFERER} !^http://[^/.]\.planetaki\.com$ [NC]
RewriteCond %{HTTP_REFERER} !^http://[^/.]\.bloglines\.com$ [NC]
RewriteRule .*\.(gif|jpg|jpeg|png|bmp)$ - [F,NC,L]
</ifmodule>

Configurandolo así directamente no se mostrará ninguna imagen, ahora si querés mostrar una imagen a cambio de la elegida por quien hace hotlink podés hacer así:

RewriteRule .*\.(gif|jpg|jpeg|png|bmp)$ http://dominio-de-la-imagen-/no-hotlink.jpe [R,NC,L]
Nota: como los jpg no se visualizan, hay que ponerle la extensión jpe a la imagen en caso de alojarla en nuestro servidor

Ejemplo de como se ve:

Ejemplo de como quedaría todo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<ifmodule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://tengoun.com.ar$ [NC]
RewriteCond %{HTTP_REFERER} !^http://tengoun.com.ar/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.tengoun.com.ar$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.tengoun.com.ar/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.google.com/reader/view/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.google.com/reader/m/view/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://[^/.]\.feedburner\.com$ [NC]
RewriteCond %{HTTP_REFERER} !^http://feeds.feedburner.com/TengoUncomar$ [NC]
RewriteCond %{HTTP_REFERER} !^http://[^/.]\.planetaki\.com$ [NC]
RewriteCond %{HTTP_REFERER} !^http://[^/.]\.bloglines\.com$ [NC]
RewriteRule .*\.(gif|jpg|jpeg|png|bmp)$ http://tengoun.com.ar/no-hotlink.jpe [R,NC,L]
</ifmodule>

Nota: no olviden reemplazar los dominios.

Por último, mi opinión es que si quieren que se muestre una imagen elegida en lugar de la “robada” obviamente la deberían alojar en un servidor que no sea al que estamos protegiendo ya que no tendría sentido y dejaríamos de lado el propósito de evitar el hotlink para disminuir el consumo de ancho de banda.Lo mas recomendable sería que no se muestre nada.
Nota de nuevo: Agradecería que si alguien no puede ver las imagenes desde su lector de feeds lo comente para así poder agregar su lector a la lista blanca ;) .

A continuación, una muestra de mi htaccess actual:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<ifmodule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://tengoun.com.ar$ [NC]
RewriteCond %{HTTP_REFERER} !^http://tengoun.com.ar/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.tengoun.com.ar$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.tengoun.com.ar/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.feedburner.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://feeds.feedburner.com/TengoUncomar$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.planetaki.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://[^/.]\.bloglines\.com$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.google.com/reader/view/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.google.com/reader/m/view/.*$ [NC]
RewriteRule .*\.(gif|jpg|jpeg|png|bmp)$ - [F,NC,L]
</ifmodule>

Mucho de lo que aprendí y publiqué sobre htaccess lo encontre por Perishable Press.

Actualización: Mediante un comentario preguntaron como se haría para permitir el hotlink a todos menos a un sitio, lo que hay que hacer es esto:

1
2
3
4
5
<ifmodule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_REFERER} ^http://url-a-excluir.tld/.*$ [NC]
RewriteRule .*\.(gif|jpg|jpeg|png|bmp)$ - [F,NC,L]
</ifmodule>

si alguien tiene problemas o alguna duda que avise y vemos que podemos hacer ;)

About the Author

Gaston

Soy un Blogger argentino apasionado en la búsqueda constante de nuevos proyectos. Actualmente desarrollando nuevas estrategias de posicionamiento web.

Be the first to comment on "Evitar Hotlink mediante htaccess"

Deja un comentario.

Tu dirección de correo no será publicada.


*