Tutorial 2: Utilizar Mod Rewrite para URLs Amigables
Bueno, ModRewrite es un Módulo que utiliza Apache para intercambiar las direcciones webs tipo MASCARAS con urls reales…
Por ejemplo si ustedes tienen un archivo .php que recibe datos, (algo como index.php?categoria=1) podrían enmascarar ese vínculo por uno mas AGRADABLE al ojo y a la memoria, haciendole la vida más fácil al visitante, e incluso robots como Google pueden indexar más rápido.
Antes de empezar debes revisar que en el httpconf este habilitado el módulo mod_rewrite.so descomentas la linea (le borras el #)
LoadModule rewrite_module modules/mod_rewrite.so
y ya estas listo. Ahora crea un archivo de texto cualquiera y ejecuta la consola de windows. Renombra el archivo de texto que creaste a .htaccess luego lo abres con cualquier editor de texto.
SINTÁXIS
- RewriteRule -
. (punto) cualquier caracter
[a-z] de la a hasta la z //minusculas
[A-Z] de la A hasta la Z //mayusculas
[0-9] solo numeros
[a-z0-9] de la a hasta la z y desde el 0 al 9 //combinaciones
[-a-z_] con el guion de la a hasta la z y con el guion bajo.
Con el ^ se niega la expresion[^a-z] sin letras desde la a hasta la z
——————————
? 0 o 1 caracter desde la expresion
* 0 o N caracter desde la expresion
+ 1 o N caracter desde la expresion
——————————-
^ Inicio de la expresion
$ Fin de la expresionanteponiendo el \ se pueden utilizar los simbolos ()[].
EJEMPLO DE UN .HTACCESS
# Se inicia el MOD RewriteEngine On #ejemplo con 1 variable te lleva de # archivo_ejemplo.html hacia archivo.php?variable=ejemplo RewriteRule archivo_(.*).html archivo.php?variable=$1 #ejemplo con 2 variables RewriteRule categoria_(.*)_archivo_(.*).html archivo.php?categoria=$1&archivo=$2
Como ven es muy sencillo, solo deben APRENDER a utilizar las Expresiones Regulares y pueden crear accesos mas complejos.
INFORMACIÓN ADICIONAL
Me falto agregar, que mod_rewrite solo es capaz de gestionar 9 variables, si excedes este límite, el código no funcionara de la manera que deseas.
Sin embargo, para poder crear una implementación mayor a las 9 variables:
1 2 3 4 5 6 7 | RewriteRule ^productos([^-]+)-([^-]+)-([^-]+)- ([^-]+)-([^-]+)-([^-]+)-([^-]+)-([^-]+)-(.+)$ /script.php.$9?v1=$1&v2=$2&v3=$3&v4=$4&v5=$5 &v6=$6&v7=$7&v8=$8 [C] RewriteRule ^script\.php\.([^-]+)-([^-]+)-([^-]+) -([^-]+)-$ /script.php?v9=$1&v10=$2&v11=$3&v12=$4 [QSA,L] |
Deben dejar las declaraciones en una sola línea, tuve que cortarlo en 2 por que se salía del límite
.
[...] Tutorial 2: Utilizar Mod Rewrite para URLs Amigables [...]
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
Lo que pasa es que mod_rewrite se limita al uso maximo de 9 variables
… ademas, si excedes ese limite, yo diria que debes pensar un poco mejor la solucion que estas aplicando.
Lo que se hace en este caso es algo similar a lo que voy a agregar en este mismo tutorial
Gracias por tu respuesta Michael.
Perdona por mi torpeza, estoy un poco espeso y no termino de entender la información adicional:
/script.php.$9?v1=$1….
¿Que hace $9 detrás del .php?
Al final ya lo he solucionado con rewriteCond y parametros del tipo %N, pero la verdad no me convence demasiado.
Gracias y un saludo