Prevenir el hotlinking e implementar REST

Nuevas características en el obokaman.com. Muy posiblemente las hayas pasado por alto, y por eso mismo las comento aquí, por si te son de utilidad en algún momento. Se trata de dos soluciones concretas que tienen que ver con el fichero de configuración .htaccess y el mod rewrite para Apache, que permite que el servidor web "reescriba" una URL que recibe.

En primer lugar, este último mes he visto que estamos llegando al límite de transferencia del hosting de obokaman.com, 4Gb al mes. Esto ha venido dado por diversas circunstancias, como algunas fotos tituladas "maremoto" en la galería, que han provocado un aluvión de visitas desde Google Images, y el hecho que diversas páginas externas enlazan directamente con imágenes de obokaman.com (algo conocido como hotlinking o robo de ancho de banda), provocando que se descarguen de este servidor cada vez que alguien visita su web. Feo. Aunque supongo que la mayoría de las veces se hace por desconocimiento. Sea como sea, antes de plantearme eliminar alguna sección de la web para reducir tráfico, prefiero plantearme alguna opción menos bestia. He optado por bloquear el acceso a las imágenes de obokaman.com desde el exterior. A partir de ahora, cuando alguien muestre una imagen de obokaman.com en su server, aparecerá este gif.

Esto es sencillo de conseguir modificando o creando un fichero llamado ".htaccess" en la carpeta raíz, con el siguiente contenido:

RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^https://(www\.)?obokaman\.com/ [NC]
RewriteCond %{HTTP_REFERER} !^https://(www\.)?internostrum\.com/ [NC]
RewriteCond %{HTTP_REFERER} !^https://(www\.)?bloglines\.com/ [NC]
RewriteCond %{HTTP_REFERER} !^https://(www\.)?feedness\.com/ [NC]
RewriteRule \.(jpe?g|gif|bmp|png)$ nohotlink.gif [L]

Como ves, las líneas donde aparece "RewriteCond", son en las que se especifica qué servidores son los "autorizados". En mi caso he activado dos lectores de noticias y la página que permite hacer las traducciones de catalán a castellano. Al final, RewriteRule, le dice qué hacer cuando se cumplan las condiciones _redireccionar a la imagen nohotlink.gif_. Tu puedes cambiar esas lineas para adaptarlo a tus necesidades.

El segundo tema que queria tratar de instaurar en obokaman.com era referente a las URL "amigables", esto es, intentar evitar las direcciones del tipo "indice_msg.php?blog=colectivo&categoria=Internet", que resultan ininteligibles en muchos casos y cambiarlo por algo del tipo "/archivos/colectivo/internet". De la misma manera, a partir de ahora para acceder a los mensajes lo haremos usando la url www.obokaman.com/mensaje/id_del_mensaje, para acceder al blog de cada uno, lo haremos escribiendo www.obokaman.com/blog/nombre_de_usuario., etc... Aunque las URL así lo indiquen, no hay ninguna carpeta en la web que se llame "blog" ni "archivos" ni "mensaje". De traducir esas URL a las correctas se encarga de nuevo el mod rewrite de Apache. Estas son las lineas que convierten las URL en el caso de obokaman.com

RewriteEngine On
  RewriteRule ^(.*)mensaje/(.*)/?$ /mensaje/$2 [QSA]
  RewriteRule ^(.*)archivos/(.*)/(.*)?/?$ /indice_msg.php?blog=$2&categoria=$3 [L]
  RewriteRule ^(.*)archivos/(.*)/?$ /indice_msg.php?blog=$2&categoria=$3 [L]
  RewriteRule ^(.*)archivos/?$ /indice_msg.php [QSA]
  RewriteRule ^(.*)buscar/?$ /buscar.php [QSA]
  RewriteRule ^(.*)blog/(.*)/?$ /index.php?blog=$2 [QSA]

RewriteRule le especifica mediante expresiones regulares, la cadena modelo y la URL real a la que se debe redireccionar en cada caso. Lo de las expresiones regulares tiene candela. Si quieres empaparte con su sintaxis te recomiendo esta web como referencia.

Bueno, y eso es todo. Como ves, nada que afecte en apariencia al funcionamiento normal de la web, pero que mejora su rendimiento.

Albert García Gibert

Cofounder and former CTO of Uvinum. Founder of Obolog and Splitweet. Father of Júlia & Abril. I'd like to travel more and improve my guitar skills.

El Prat de Llobregat, Barcelona https://twitter.com/obokaman