mitago.net

Página web de Celso González

Mod_rewrite para nanoblogger

Revisando los errores 404 de este sitio web he visto que muchos de ellos corresponden al cambio de direcciones provocadas por la actualización del Nanoblogger a una versión más moderna en los ficheros del archivo
Por ejemplo tenemos que direcciones que antes eran

/archives/2004-07.html
/archives/2005-03-25T15_57_02.html

Ahora han pasado a tener esta estructura

/archives/2004/07/index.html
/archives/2005/03/25/T15_57_02/index.html

Como no me gusta que la gente que me visita pierda los enlaces, y a los que les preocupe el posicionamiento que sepan que a los buscadores tampoco les gusta, me he decidido a arreglar esto con el módulo mod_rewrite de apache

En apache2 activar el mod_rewrite es tan sencillo como crear un enlace simbólico de mods-available/rewrite.load a mods-enabled y hacer un restart

La parte interesante consiste en crear las reglas de reescritura, hay dos sitios donde se pueden colocar.
La primera en una de las clausulas de Directory en los ficheros de configuración y la segunda en un fichero .htaccess en el directorio que nos interese. Para este caso yo he utilizado la segunda opción.

Ojo, para que funcionen los ficheros .htaccess debemos asegurarnos que tenemos la opción AllowOverride que nos lo permita. Si lo tenemos a None, por ejemplo, lo llevamos claro.

Vamos con el fichero .htacces, lo primero activaremos el rewrite en este directorio y lo segundo fijaremos la posición del directorio local respecto al directorio web. Es decir si yo tengo el fichero en /var/www/archives (local), suponiendo el directorio raiz del servidor está en /var/www, el directorio web estará en /archives

RewriteEngine On

RewriteBase /archives

A partir de ahora nos olvidamos del archives, vamos con la primera regla. Se trata de transformar 2004-07.html a 2004/07/index.html

RewriteRule ^([0-9]+)-([0-9]+)\.html $1/$2/index.html   [R]

Es muy sencillo, todo lo que está entre paréntesis se convierte en las variables de la segunda parte. Así la expresión ([0-9]+) se convierte en $1. [0-9] nos dice el rango de caracteres que puede contener el rango y el símbolo + nos dice que tiene que haber uno o más de lo anterior. Todo lo que no está entre paréntesis son cosas literales.

La [R] del final sirve para que modifique el enlace, si no pone veremos en el navegador 2004-07.html y si lo ponemos veremos 2004/07/index.html. Creo que es mejor la opción de ponerlo ya que evitas que de esa forma siempre muestras el enlace correcto

La segunda regla es igual de sencilla la única variación que hay es que utilizamos (.*) como cuarta variable, en este caso el . es un comodín que indica cualquier carácter, por eso hay que escaparlo como \. cuando queremos que sea un punto de verdad como en \.html. El * dice que puede haber un número indeterminadado entre 0 y más del carácter anterior.

RewriteRule ^([0-9]+)-([0-9]+)-([0-9]+)T(.*)\.html $1/$2/$3/T$4/index.html [R]

Así que como puedes ver el mod_rewrite para torpes no tiene mucho más misterio, si todavía te quedan dudas ponme un comentario o enviame un mail

-----

mar 30 agosto 2005 18:472 comentarios