Mod_Rewrite es un modelo de Apache que viene instalado por defecto pero a veces no prendido por defecto. Para eso httpd.conf. Bueno, lo que nos deja hacer el modulo Mod_Rewrite es jugar con las URL de un sitio. Se puede redireccionar una url para que vaya a otra, se pueden tomar variables de servidor y en base a eso modificar una url o, por lo que mas se usa, transformar las url de php?categoria=algo&numero=algo en urls “lindas” y “amigables” a los buscadores, SEO y demás yerbas.
Es el método con el cual cuando entras a un portal la url es http://www.lalala.com/web/1.html en ves de http://www.lalala.com.php?categoria=web&pag=1.
El Mod_Rewrite funciona antes del render la pagina, entra la petición y la devolución del servidor. Ante la petición chequea las reglas y después sigue adelante. Lo que hace en si es transformar urls, ser un traductor que le dice el servidor, cuando te den esto, vos devolve esto otro.
Primero de todo, para que ande este modulo, tenemos que crear (en el caso de no tenerlo) un archivo .htaccess en el root de nuestro sitio. Y dentro de el iría algo así:
RewriteEngine On RewriteRule ^([a-z]+).html$ /index.php?categoria=$1 [L] RewriteRule ^([0-9]+).html$ /index.php?pag=$1 [L] RewriteRule ^([a-z]+)/([0-9]+).html$ /index.php?categoria=$1&pag=$2[L]
Vamos por partes:
Primero le decimos que prenda el modulo con
RewriteEngine On
Después le damos la primera “regla” o “RewriteRule”:
RewriteRule ^([a-z]+).html$ /index.php?categoria=$1 [L]
Acá le decimos que “capture” toda información que venga de la url que sea entre a-z y termine en .html (se usan las Regular Expressions acá, hay que darles una releída). Captura todo lo que este entre () y lo guarda como una variable. Después le dice que eso que captura, lo transforme en index.php?categoria=lavariable que capturamos, Y para terminar un Flag o opciones de mas. Con esta regla cuando pongan lala.com/web.html los va a llevar a lala.com/index.php?categoria=web
La sintaxis sería algo como:
Regla => ^(lo que busco y quiero guardar, ej: web).extensión del archivo$ => /a que quiero que se convierta esa url.php?categoria=el dato que tome en lo que busco [L]
- ^ significa que empieza el string de regular expressions
- $ que termina el bloque de lo que quiero buscar
- $1 es la variable que “guarde” de lo que busco que esta entre ()
- [L] es que si esta condición se da, no busque mas reglas y termine.
La segunda regla es lo mismo pero solo para numero de pagina:
RewriteRule ^([0-9]+).html$ /index.php?pag=$1 [L]
Con esta regla cuando pongan lala.com/1.html los va a llevar a lala.com/index.php?pag=1 La última es la unión de las dos
RewriteRule ^([a-z]+)/([0-9]+).html$ /index.php?categoria=$1&pag=$2[L]
Cuando pongan lala.com/web/1.html los va a llevar a lala.com/index.php?categoria=web&pag=1 La regla es, cuando encuentres un entra a y z (o sea la categoría web u otra), una / y un entra 0 y 9 (o sea el numero de pagina).html, transformalo en index.php?categoria=$lo que capturaste&pag=$lo que capturaste.
Les dejo un link de un cheat sheet de Mod_Rewrite, el cual es mucho más amplio y poderoso que solo esto, pero en el 80% de los casos lo van a usar para hacer estas cosas.
Posts Relacionados:
- Insertar texto en HTML usando Javascript Cuando quize hacerlo busque por todos lados y no encontre un tutorial facil para hacerlo. Asi que hay va. La...
- Random de imágenes con PHP+CSS Me habían pedido, que cuando entras a un sitio haya una pagina de introducción con fotos full screen que cambien cada vez que entras,...
- Fancybox, un lightbox de imágenes con JQUERY Este para mi es el mejor plug in de JQUERY para lograr el efecto de lightbox en las imágenes. Ese efecto...
- Diseñadores VS Desarrolladores Web Genial genial ilustración de las diferencias entre el diseñador y el desarrollador web, dos caras de una misma moneda. Yo me veo...
