drupal

Evitar el hotlinking

Evitar el hotlinking

Vamos a ver como evitar el hotlinking. El hotlinking es la acción de usar una imagen de una página web en otra directamente (con la url del sitio original).

¿Cual es el problema del hotlinking? El problema esta en que esa imagen aunque la usen en otra web se esta descargando desde tu servidor y se esta consumiendo tu transferencia mensual de datos (Cuando contratas un host, tienes asignado una cantidad de MB que se pueden descargar de tu web cada mes y si los superan cortan el acceso a tu web). Por lo tanto no nos interesa que usen nuestras imágenes en otras webs.

Para evitar esto podemos indicarle al servidor web que no de las imágenes (o que de otra que le especifiquemos) si no es solicitada cuando estén mirando una de las webs que le indiquemos.

Pero aquí surge otro problema: si solo permitimos que nuestros sitios web accedan a nuestras imagenes, entonces las personas que usan un lector de rss online (tipo google reader, netvibes, etc) no se les mostrarán las imágenes de tus artículos. Por lo que tendremos que añadir también las webs de los principales lectores de rss online.

Para ello tendremos que poner en el archivo .htaccess las siguientes líneas (acordaros de sustituir el dominio de mi blog por los vuestros):

RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_REFERER} !^http?://(www.)?add.my.yahoo.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http?://(www.)?bloglines.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http?://(www.)?feedlounge.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http?://(www.)?feedness.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http?://(www.)?feeds2.feedburner.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http?://(www.)?feeds.feedburner.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http?://(www.)?bing.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http?://(www.)?google.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http?://(www.)?google/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http?://(www.)?imagesgoogle/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http?://(www.)?live.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http?://(www.)?feedburner.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http?://(www.)?netvibes.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http?://(www.)?newsalloy.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http?://(www.)?newsgator.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http?://(www.)?yahoo.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http?://(www.)?yahoo.es/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http?://(www.)?blog.intropedro.es/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^$
RewriteRule .*.(jpe?g|gif|bmp|png|jpg)$ http://img24.imageshack.us/img24/4590/hotlinking.gif [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

Con la orden RewriteRule indicamos las extensiones de las imágenes que no queremos servir al exterior y también la imagen que serviremos cuando nos pidan una imagen desde otra web. Aunque la imagen que dará el servidor web en vez de la pedida puede estar en nuestro servidor, os recomiendo ponerla en otro lado para no consumir nuestro ancho de banda.

Además os pongo unos cuantos ejemplos de imágenes hotlinking para que las utiliceis.

Ejemplo de hotlonking

Ejemplo de hotlinking

Ejemplo de hotlinking

Ejemplo de hotlinking

Instalando SMTP Authentication Support en drupal

SMTP Authentication Support

Introducción

Para enviar los emails de nuestro drupal utilizando smtp disponemos del modulo SMTP Authentication Support. A continuación os muestro como instalarlo. (Como siempre la última versión lo tenéis en mi wiki)

Instalación

Instalamos el plugin:

>> wget http://ftp.drupal.org/files/projects/smtp-6.x-1.0-beta3.tar.gz
>> gzip -d smtp-6.x-1.0-beta3.tar.gz
>> tar -xvf smtp-6.x-1.0-beta3.tar

Este plugin usa una librería llamada phpMailer. Tendremos que instalarla también. Ojo!! tuve que bajar una versión específica (en mi caso la versión 2.2.1 para php 5):

>> cd smtp
>> mkdir phpmailer
>> cd phpmailer
>> wget http://fastbull.dl.sourceforge.net/sourceforge/phpmailer/phpMailer_v2.2.1_.tar.gz
>> gzip -d phpMailer_v2.2.1_.tar.gz
>> tar -xvf phpMailer_v2.2.1_.tar
>> cp ../class.phpmailer.php.2.2.1.patch .
>> patch -p0 < class.phpmailer.php.2.2.1.patch
  patching file class.phpmailer.php
>> rm phpMailer_v2.2.1_.tar
temas: 

Poner marcas de agua en las imagenes de drupal

Ejemplo de marca de agua en una imagenen drupal

Para poner marcas de agua podemos usar el módulo ImageCache Actions de drupal. Vamos a usar los siguientes módulos:

Lo primero que tendremos que hacer es descargarlos y descomprimirlos en nuestro drupal.

Una vez descargados y descomprimidos los activaremos. Vamos al menú Administer, Site building y Modules y activamos primeramente el módulo ImageAPI y le damos a Save configuration. Luego activamos el módulo ImageCache y le damos otra vez a Save configuration. Por último activaremos el módulo Imagecache Actions.

Ahora tendremos que elegir que herramienta usar para tratar las imágenes. Tenemos dos maneras: ImageMagick o GD2. Con ImageMagick me daba un error así que decidí usar GD2. Para usar GD2 tendremos que activar el módulo ImageAPI GD2, si decidimos usar ImageMagick tendremos que activar el módulo ImageAPI ImageMagick.

Ya tenemos el módulo ImageCache funcionando, para poder poner marcas de agua tendremos que activar el módulo Imagecache Canvas Actions.

Por último solo nos falta una cosa, tenemos que activar el módulo ImageCache UI para tener un menú gráfico para hacer las cosas (sin este menú no se como se hará todo esto).

Ahora vamos al menú Administer, Site configuration e ImageAPI. Ahí podremos decidir que módulo queremos usar para tratar las imágenes (en el caso que tengamos los dos módulos GD2 e ImageCache).

Después iremos al menú Administer, Site building e ImageCache. Si no hemos creado ninguna regla antes nos pedirá que pongamos un nombre para la primera regla Preset Namespace. Sino le daremos a Add New Preset, nos pedirá el nombre del Preset Namespace y le damos a Create New Preset. Entre la acciones que nos saldrán tendremos que seleccionar Overlay: file image to canvas (watermark), entonces nos dejará meter ciertos datos para configurarlo. El único que he tocado yo ha sido el file name en el que le indico la imagen con la marca de agua (yo usé un png con transparencia). Una vez configurada la acción le damos a Add action.

Para aplicar estas acciones tendremos que añadir en la URL de la imagen /imagecache/NOMBRE_DE_TU_PRESET_NAMESPACE. Por ejemplo si tenemos una imagen http://www.intropedro.com/system/file/imagen.jpeg si la quisiéramos ver con la marca de agua definida en una preset namespace de nombre agua sería usando esta url http://www.intropedro.com/system/file/imagecache/agua/imagen.jpeg.

Ya tenemos nuestras imágenes con marcas de agua. Como siempre la última versión de como hacer esto y con soluciones a problemas en mi wiki.

temas: 

Nuevo filtro de spam, enlaces a servicios y nombrado de las url

Spam en introblog

Nuevo filtro de spam

Últimamente mi blog ha estado sufriendo varios comentarios de spam. Para el problema del Spam tenía puesto el módulo Akismet pero no se porque no me funcionaba (No se si sería que lo tendría mal configurado, que tendría algún bug para mi versión de drupal, ...). Por ello empecé a buscar otras soluciones. Encontré módulos que utilizaban servicios web para detectar el spam:

También encontré sistemas que pedían siempre un captcha (Imagen de un código que tienes que introducirlo para certificar que eres una persona y no un bot) como los siguientes:

  • ReCAPTCHA
  • CAPTCHA
  • Como Akismet no me funcionaba, decidí probar con Mollom, este módulo se conecta a su servicio web para comprobar si cada comentario es spam y aveces pide que introduzcas un CAPTCHA si tiene dudas. En menos de 1 día he comprobado que ya ha detectado 2 comentarios de spam, así que funcionar me funciona bien.

Nombrado de las url

Por defecto drupal usa los enlaces para acceder a cada contenido con el id de este, lo cual hace que los enlaces sean muy poco descriptivos. Con el módudo Path podemos crear un alias para cada enlace que muestre el titulo de cada contenido con la url. Antes los artículos tenían la siguiente url:

Ahora los enlaces a los artículos muestran el título del artículo en la url de la siguiente manera:

Luego con el módulo Pathauto esto se hace automáticamente cada vez qeu ponga un artículo. También necesitaremos el módulo Token ya que es una dependendia del Pathauto.

Enlaces a servicios

 Otra de las funcionalidades que he puesto a sido añadir en la vista de los artículos varios enlaces a servicios de internet para añadir el articulo a nuestros favoritos o redes sociales (delicious, digg, technorati, facebook, ...) con el módulo Service links, como podemos ver en la siguiente imagen:

Service links en Drupal 6

El módulo permite añadir enlace a las siguientes redes:

  • del.icio.us
  • Digg
  • StumbleUpon
  • Propeller
  • Reddit
  • ma.gnolia.com
  • Newsvine
  • Furl
  • Facebook
  • Google
  • Yahoo
  • Technorati
  • IceRocket
temas: 

Actualizar un modulo en drupal

Módulos de drupal desactualizados

Introducción

Siempre es bueno estar actualizado con las últimas versiones y en drupal es muy fácil actualizar un módulo. He diferentes maneras de actualizar los módulos.

Manual

La forma de actualizar un módulo manualmente es por medio de la consola. Los pasos serían: bajarse la última versión del plugin, descomprimirlo y ejecutar la tarea de actualización de drupal. Aquí os pongo un ejemplo de la actualización del módulo xmlsitemap:

>> cd TUDRUPAL/sites/all/modules
>> wget http://ftp.drupal.org/files/projects/xmlsitemap-6.x-0.x-dev.tar.gz
>> gzip -d xmlsitemap-6.x-0.x-dev.tar.gz
>> tar -xvf xmlsitemap-6.x-0.x-dev.tar

Ya lo tenemos en la carpeta de módulos de drupal. Ahora tenemos que ir a la url de nuestro drupal y acceder al fichero update.php para actualizar la base de datos de drupal por si la nueva versión del módulo requiere modificaciones en esta. Por ejemplo:

http://TUDRUPAL.com/update.php

Le damos al botón continuar y luego al botón update. Ya tenemos el módulo actualizado.

Con Plugin Manager

Plugin Manager es un plugin de drupal que te permite gestionar los plugins a través de las páginas de administración de drupal. Una de las tareas que permite es la de actualización de los módulos.

temas: 

Varias webs en un drupal

Logo de Drupal CMS

Cada día tengo más portales web que gestionar. Y según pasa el tiempo me he encontrado un gran problema cuando hay que actualizar el drupal, módulos o themes. El problema está en que lo tengo que hacer para cada portal. Por esto me he dispuesto a aprender la posibilidad de tener varios portales a partir de un solo drupal.

En la carpeta raíz del drupal, podemos encontrar una carpeta de nombre sites. Dentro de el pondremos una carpeta para cada portal. Hay dos carpetas especiales: "default" que es donde irá a parar salvo que exista un sitio definido para ese subdominio, y "all" que es la configuración que afecta a todos los sitios definidos. El nombre de estas carpetas serán el dominio del sitio. Por ejemplo: para http://blog.intropedro.es tendríamos que tener la carpeta system.

El proceso es el siguiente:

  • Creamos una carpeta con el nombre del dominio en la carpeta sites. Por ejemplo: sites/prueba.intropedro.com)
  • Copiamos un archivo settings.php en la carpeta sites/prueba.intropedro.com/settings.php
  • Editamos el fichero settings.php y cambiamos la línea siguiente:
 # $base_url = 'http://www.example.com';  // NO trailing slash!

por esta otra:

 $base_url = 'http://prueba.intropedro.com';
  • Creamos las carpetas files, modules y themes en la carpeta sites/prueba.intropedro.com.
  • Accedemos a la url http://prueba.intropedro.com y nos aparecerá el formulario de instalación, ponemos los datos y los guardamos.
  • Accedemos otra vez a la url http://prueba.intropedro.com, creamos una cuenta para que sea la cuenta de administrador y vamos a administraciónFile system y en File system path ponemos sites/prueba.intropedro.com/files

Ya tenemos nuestro sitio construido, tendremos que hacer estos pasos cada vez que queramos crear una web.

Los módulos y themes que se encuentren en la carpeta modules de un sitio, solo los verá ese sitio, y los que estén en la carpeta sites/all o las del raíz, los verán todos los sitios. Esto solo es la punta del iceberg, ya que puedes hacer que varios sitios compartan información, por ejemplo podrían compartir los usuarios (imaginaros que vuestra introcuenta sirviera para entrar en todos portales que hiciera yo). Aunque para compartir información tendrían que compartir base de datos. Esto lo miraré otro día.

temas: