Ejemplos del módulo rewrite en Apache 2.2

Este artículo lo he escrito para explicar en clase a mis alumnos del ciclo formativo de grado superior de Administración de Sistemas Informáticos en Red, una introducción al módulo rewrite de Apache.

El módulo rewrite nos va a permitir acceder a una URL e internamente estar accediendo a otra. Ayudado por los ficheros .htaccess, el módulo rewrite nos va a ayudar a formar URL amigables que son más consideradas por los motores de búsquedas y mejor recordadas por los humanos. Por ejemplo estas URL:

www.dominio.com/articulos/muestra.php?id=23
www.dominio.com/pueblos/pueblo.php?nombre=torrelodones

Es mucho mejor escribirlas como:

www.dominio.com/articulos/23.php
www.dominio.com/pueblos/torrelodones.php

Ejemplo 1: Reescribir URL

Si tenemos el siguiente fichero php (descargar) llamado operacion.php, podríamos usarlo de la siguiente manera:

http://localhost/operacion.php?op=suma&op1=6&op2=8

Y si queremos reescribir la URL y que usemos en vez de php html, de esta forma:

http://localhost/operacion.html?op=suma&op1=6&op2=8

Para ello activamos el mod_rewite, y escribimos un .htaccess de la siguiente manera:

Options FollowSymLinks
RewriteEngine On
RewriteRule ^operacion\.html$ operacion.php

Ejemplo 2: Cambiar la extensión de los ficheros

Si queremos usar la extensión do en vez de html podríamos usar este .htacces

Options FollowSymLinks
RewriteEngine On
RewriteRule ^(.+)\.do$ $1.html [nc]

Esto puede ser penalizado por los motores de búsqueda ya que podemos acceder a la misma página con dos URL distintas, para solucionar esto podemos hacer una redirección:

RewriteRule ^(.+)\.do$ $1.html [r,nc]

Ejemplo 3: Crear URL amigables

Como habíamos visto anteriormente el fichero operacion.php se podía ejecutar de la siguiente manera:

http://localhost/operacion.php?op=suma&op1=6&op2=8

Creando una URL amigable podríamos llamar a este fichero de la siguiente manera:

http://localhost/suma/8/6

¿Cómo podemos conseguir esto?

Crea un .htaccess con el siguiente contenido:

Options FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteRule ^([a-z]+)/([0-9]+)/([0-9]+)$ operacion.php?op=$1&op1=$2&op2=$3

Ejemplo 4: Acortar URL

Supongamos que dentro de nuestro DocumentRoot tenemos una carpeta búsqueda con un fichero buscar.php (descargar). Este fichero me permite obtener la página de búsqueda de google con el parámetro dado, de esta forma:

http://localhost/busqueda/buscar.php?id=hola

Nos gustaría poder crear una URL más corta que haga lo mismo, escribiríamos en nuestro .htaccess un RewriteRule de la siguiente forma:

RewriteRule ^buscar busqueda/buscar.php

De esta forma accederíamos por medio de la URL:

http://localhost/buscar?id=hola

Ejercicio: Siguiendo las técnicas anteriormente vistas, realiza una reescritura de URL para que pudieramos realizar búsquedas con URL de la siguiente manera:

http://localhost/buscar/hola.html

Ejemplo 5: Uso del RewriteCond

Ls directiva RewriteCond nos permite especificar una condición que si se cumple se ejecuta la directiva RewriteRule posterior. Se pueden poner varias condiciones con RewriteCond, en este caso cuando se cumplen todas se ejecuta la directiva RewriteRule posterior.

Como vemos en la documentación podemos preguntar por varios parámetros , entre los que destacamos los siguientes:

%{HTTP_USER_AGENT}: Información del cliente que accede.
Por ejemplo, podemos mostrar una página distinta para cada navegador:

RewriteCond %{HTTP_USER_AGENT} ^Mozilla
RewriteRule ^/$ /index.max.html [L]

RewriteCond %{HTTP_USER_AGENT} ^Lynx
RewriteRule ^/$ /index.min.html [L]

RewriteRule ^/$ /index.html [L]

%{QUERY_STRING}: Guarda la cadena de parámetros de una URL dinámica.Por ejemplo:

Teníamos un fichero index.php que recibía un parámetro lang, para traducir el mensaje de bienvenida.

http://localhost/index.php?lang=es

Actualmente hemos cambiado la forma de traducir, y se han creado distintos directorios para cada idioma y dentro un index.php con el mensaje traducido.

http://localhost/es/index.php

Sin embargo se quiere seguir utilizando la misma forma de traducir.

RewriteCond %{QUERY_STRING} lang=(.*)
RewriteRule ^index\.php$ /%1/$1

%{REMOTE_ADDR}: Dirección de destino. Por ejemplo puedo denegar el acceso a una dirección:

RewriteCond %{REMOTE_ADDR} 145.164.1.8
RewriteRule ^(.*)$ / [R,NC,L]

También podemos controlar la reescritura de URL según la hora y la fecha, para saber más lee este artículo.

%{HTTP_REFERER}: Guarda la URL que accede a nuestra página y %{REQUEST_URI} guarda la URI, URL sin nombre de dominio. Podemos evitar el Hot_Linking, o uso de recursos de tu servidor desde otra web. Por ejemplo, un caso muy común es usar imágenes alojadas en tu servidor puestas en otras web. Para ello podemos escribir el siguiente .htaccess:

RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?dominio\.com/ [NC]
RewriteCond %{REQUEST_URI} !hotlink\.(gif|png) [NC]
RewriteRule .*\.(gif|jpg|png)$ http://www.dominio.com/image/hotlink.png [NC]

En el anterior ejemplo el primer RewriteCond permite la solicitud directa pero no desde otras páginas (referrer vacío). La siguiente línea indica que si el navegador ha enviado una cabecera Referrer y esta no contiene la palabra “dominio.com” se ejecutará el RewriteRule. La ultima instrucción RewriteCond indica que si en la url solicitada se encuentra el nombre de la imagen “hotlink” no se realizará el RewrtieRule; esto se pone porque la imagen hotlink.png va a ser la que vamos a usar en RewriteRule y si no ponemos este RewriteCond también sería redirigida la solicitud a esta imagen. La última instrucción del ejemplo es el RewriteRule que indica que cualquier solicitud a una imagen desde otro referrer será reescrita en el servidor hacia la imagen hotlink.png y esta será la imagen que se vea en la web que te esté intentando robar la imagen.

Ejercicio: Realiza un .htaccess para evitar el hot-linking. Puedes usar esta esta imagen para realizar el ejercicio.

Ejemplo 6: URL amigables con WordPress

Ejercicio: Instala wordpress en tu servidor con el módulo rewrite desactivado, comprueba que las URL no son amigables. Activa el módulo y a continuación configura el blog para que tenga URL amigables (Settings->Permalink).

Posted in General at octubre 28th, 2011. No Comments.
Tags: , ,

php no funciona con el módulo userdir de Apache

Estoy preparando un servidor para que mis alumnos hagan prácticas de Implantación de Aplicaciones Web. Para ello he activado el módulo userdir, que permite a cada usuario del sistema a tener un espacio web disponible en el servidor web. Para activar este módulo simplemente hay que realizar los siguientes pasos:

a2enmod userdir
/etc/init.d/apache2 restart

A continuación nos dimos cuenta que los ficheros php guardados en el directorio public_html de los suarios no se precesaban correctamente. La solución al problema es editar el fichero /etc/apache2/mods.enabled/php5.conf y comentar la línea php_admin_value engine Off, quedando el fichero de la siguiente manera:

...
 <IfModule mod_userdir.c>
 <Directory /home/*/public_html>
 # php_admin_value engine Off
 </Directory>
 </IfModule>
...

Para terminar reiniciando el servicio Apache2, y ya todo funciona de manera adecuada.

Posted in General at octubre 10th, 2011. No Comments.
Tags: , ,

“Navega seguro”: Publicaciones del Defensor del Menor de Andalucía

Guías “Navega seguro: Derechos de niños y niñas” y “Navega seguro: Deberes de padres y madres”, editadas por el Defensor del Menor de Andalucía en colaboración con la Agencia Española de Protección de Datos, en la que se ofrecen recomendaciones para usar Internet de forma segura.

Navega seguro: Derecho de los niños y niñas

Navega seguro: Deberes de los padres y madres

Posted in General at junio 10th, 2011. No Comments.
Tags: , , , ,

Libro gratuito de jQuery

jQuery es una biblioteca o framework de JavaScript, creada inicialmente por John Resig, que permite simplificar la manera de interactuar con los documentos HTML, manipular el árbol DOM, manejar eventos, desarrollar animaciones y agregar interacción con la técnica AJAX a páginas web. Fue presentada el 14 de enero de 2006 en el BarCamp NYC.

Para todos aquellos que están empezando a utilizar el framework jQuery para sus desarrollos, o que quieren ampliar sus conocimientos, os traemos un un libro en castellano donde podrás aprender los conceptos básicos y conceptos más avanzados sobre este fantástico framework de desarrollo.

El libro está compuesto por once capítulos, y está basado en la obra original de Rebecca Murphey. Además cada capítulo, viene acompañado por un conjunto de ejercicios donde se practicará los asuntos que se han ido aprendiendo a lo largo de ese capítulo.

Entre los temas que se ven en este libro, están los conceptos básicos, eventos, efectos, extensiones, mejoras del código o los eventos personalizados.

Fundamentos de jQuery

Posted in General at abril 7th, 2011. 1 Comment.
Tags: , , , ,

Algunos excelentes buscadores para diseñadores web

He encontrado una lista de algunos buscadores imprescindibles para quien trabaja en el diseño y creación de páginas web.

Iconlet Un buscador de iconos que ahorrará bastante tiempo a la hora de buscar estas pequeñas imágenes que le dan ese carisma especial a nuestros proyectos web.

Vector Stock Buscador de imágenes vectoriales.

Font Stock Para bajar tipografía de forma gratuita.

Vectorials Tutoriales y recursos para gráficos vectoriales.

Logopond Para buscar inspiración en el diseño de logomarcas.

Icon Seeker Otro recurso para añadirse a la lista de buscadores de iconos.

Fuente

Posted in General at octubre 4th, 2010. 1 Comment.
Tags:

Hojas de ayuda para programadores y diseñadores web

A los que conocen algún lenguaje de programación o diseñan utilizando algún lenguaje de marcas les puede venir muy bien tener a mano las famosas “hojas de ayuda” o “chuletas”, donde se muestra de una forma muy resumida todos los elementos de los distintos lenguajes.

Hoy os traigo dos páginas donde podéis encontrar cientos de hojas de ayuda: spyrestudios.com y Devchetsheet.

Posted in General at julio 12th, 2010. No Comments.
Tags: , , , , ,