Expresión regular recursiva para reescritura de mod

Estoy tratando de usar mod_rewrite para modificar recursivamente las URL de mi página web, pero no puedo descifrar la regla de reescritura para esta situación:

Quiero cambiar mis URL de patrón

http://mywebsite.com/token1-token2-token3-token4-categoryname

a

http://mywebsite.com/?cat=categoryname&search=token1+token2+token3+token4

El desafío es que la cantidad de tokens en la URL puede variar, por lo que necesito manejar de alguna manera la coincidencia de tokens y la conversión de forma recursiva. ¿Alguna idea de cómo se puede lograr esto?

preguntado el 30 de junio de 12 a las 15:06

2 Respuestas

Tratar:

# Remove all of the - and replace with +
RewriteRule ^(.*)-(.*)$ /$1+$2 [L]

# only rewrite when there are no more -
RewriteCond %{REQUEST_URI} !\-
RewriteRule ^(.+)\+([^\+]+)$ /?cat=$2&search=$1 [QSA,L]

Respondido 02 Jul 12, 04:07

Esto tampoco funcionará porque no hay límite en la cantidad de tokens, la primera regla solo funciona cuando hay exactamente dos tokens: científico.rahul

@scientist.rahul No, bucles mod_rewrite. La primera regla continuará funcionando hasta que no haya más "-". Mod_rewrite vuelve a aplicar todas las reglas hasta que el URI que ingresa al motor de reescritura es el mismo que el URI que sale. Desde un - se reemplaza con +, las URI son diferentes y mod_rewrite aplicará todas las reglas nuevamente a la nueva URI. - jon lin

@scientist.rahul Puede ver cómo funciona esto en el registro de reescritura de una prueba que ejecuté usando esas reglas exactas: pastebin.com/NsjK0c5X - jon lin

Muchas gracias, realmente funciona, no sabía que mod-rewrite redirects, tu registro fue realmente útil, gracias por la ayuda, muy apreciada. - científico.rahul

RewriteRule ^/?(.+)\-([^\-]+)$ /?cat=$2&search=$1 [QSA,L]

Respondido el 30 de junio de 12 a las 16:06

Omega, gracias por responder, pero no funcionará ya que necesito reemplazar el '-' entre tokens por '+' también - científico.rahul

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.