Como utilizar MOD_REWRITE
- 20/01/2008
- 4:15 pm
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:
-
http://www.sample.com/producto.php?cat=monitor&subcat=lcd
Se pueda acceder mediante:
-
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.
-
Options +Indexes
-
Options +FollowSymlinks
-
RewriteEngine on
-
RewriteBase /
-
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.
-
Options +Indexes
-
Options +FollowSymlinks
-
RewriteEngine on
-
RewriteBase /rewrite/
-
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.
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
- Firebug Lite
- Convertir HTML a PDF con PHP
- XRAY: Inspector HTML Online
- Generar Thumbnails con PHP
- Blog Icons: Plugin para Favicons
Total de Comentarios: 4
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?
Excelente!
Que podria estar pasando si no me funciona haciendolo justo como éste ejemplo, de hecho me muestra el mensaje de “Not Found”
Gracias!
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
[...] ZonaPHP, BaluArt, Unijimpe Read More Post a [...]


