Como utilizar MOD_REWRITE

  • 20/01/2008
  • 4:15 pm
  • unijimpe

MOD_REWRITE es un modulo del servidor web Apache que permite crear URL alternativas a nuestras páginas dinámicas de forma que sean mas fáciles de recordar y también mejor indexadas por los buscadores.

Esto nos permite que un URL de la forma:

CODE:
  1. http://www.sample.com/producto.php?cat=monitor&subcat=lcd

Se pueda acceder mediante:

CODE:
  1. http://www.sample.com/monitor/lcd/

Como Funciona?
Para utilizar MOD_REWRITE es necesario crear una serie de reglas basadas en Expresiones Regulares el cual permite identificar un determinado patrón y reescribirla. Internamente Apache procesará el URL resultante y se le mostrará al cliente.

Estas reglas se escriben y colocan en un archivo de configuración llamado .htaccess el cual se encuentra en la raíz del servidor donde se quieren aplicar estas reglas.

Utilizando MOD_REWRITE
Lo primero es crear un archivo .htaccess, en el cual incluimos código para activar la opción de reescritura y luego utilizamos el comando RewriteRule en donde pasamos dos parámetros, el primero de ellos es el URL que vamos a reemplazar y el segundo es el URL que utilizaremos de reemplazo.

Luego si deseamos convertir nuestro URL de ejemplo, utilizaremos el siguiente código.

CODE:
  1. Options +Indexes
  2. Options +FollowSymlinks
  3. RewriteEngine on
  4. RewriteBase /
  5. RewriteRule ^(.*)/(.*)/ products.php?cat=$1&subcat=$2

Nótese que $1 representa la primera coincidencia y $2 la segunda coincidencia buscada en el URL. Ahora hay que notar que esto es para cuando se desea aplicar la regla a un URL que esta en la raiz del servidor. Si nuestro URL esta en una carpeta por ejemplo llamada rewrite, entonces cambiamos el comando RewriteBase que indica la carpeta base a donde se aplicará la reescritura.

CODE:
  1. Options +Indexes
  2. Options +FollowSymlinks
  3. RewriteEngine on
  4. RewriteBase /rewrite/
  5. RewriteRule ^(.*)/(.*)/ products.php?cat=$1&subcat=$2

Luego si creamos un PHP que imprima las variables que se les pasa por URL, tendríamos el siguiente código de ejemplo.

PHP:
  1. <?php
  2. // file: products.php
  3. echo "<b>Categoría: </b>\t" . $_GET["cat"] . "<br>";
  4. echo "<b>SubCategoría</b>\t: " . $_GET["subcat"] . "<br>";
  5. ?>

Finalmente podemos ver que podemos obtener el mismo resultado al acceder a las siguientes URLs, las cuales devuelven el mismo resultado, pero obviamente la segunda forma es mucho mas corta y mas fácil de recordar.
http://samples.unijimpe.net/rewrite/products.php?cat=monitor&subcat=LCD
http://samples.unijimpe.net/rewrite/monitor/LCD/

Si desean mas información pueden leer mod_rewrite en la documentación oficial de Apache en donde encontrarán una guía muy detallada de como crear y utilizar reglas para las URLs. Finalmente para los interesados les dejo los archivo fuente de este ejemplo.

Posts Relacionados

Total de Comentarios: 4

Publicidad
23/01/2008
6:39 am

Muy bueno el tuto, funciona muy bien en mi caso, pero aun tengo un problema:

¿Que sucede si ademas de mostrar la categoria y la subcategoria, en mi web quisiera mostrar solo categoría?. Es decir:

ademas de redireccionar http://www.sample.com/producto.php?cat=monitor&subcat=lcd
quisiera redireccionar tambien
http://www.sample.com/producto.php?cat=monitor

Supongo que sería con:
RewriteRule ^(.*)/ products.php?cat=$1

Pero las dos RewriteRule juntas no me funcionan, por separado si, pero si deseo una de las dos dependiendo de la dirección con la que entre, no me funciona bien y coge la que no es. ¿Como se haría?

Mark
28/02/2008
11:58 pm

Excelente!

Que podria estar pasando si no me funciona haciendolo justo como éste ejemplo, de hecho me muestra el mensaje de “Not Found”

Gracias!

01/05/2008
12:50 pm

Muy buenas. Tengo una pequeña duda.
Tengo implementado el mod_rewrite en mi web:
http://www.alquiberia.es
Pero tengo un problema cuando supero las 10 variables. Todo funciona perfectamente mientras no supere las 10 variables.
Por ejemplo:
Rewriterule ^([^/]+)-([^/]+)/([^/]+)-([^/]+)/([^/]+)-([^/]+)/([^/]+)-([^/]+)\.html$ index.php?$1=$2&$3=$4&$5=$6&$7=$8 [NC,L]

Funciona perfectamente pero si supero las 9 variables falla y mezcla el valor de las variables.

Alguna sugerencia???

Gracias

30/07/2008
3:09 am

[...] ZonaPHP, BaluArt, Unijimpe     Read More    Post a [...]

Enviar Comentario

(*)

(*)