Patrones de expresiones regulares para htaccess

  • Por
  • Apache
Ejemplos de patrones de expresiones regulares utilizados comúnmente para redirecciones con htaccess.
Las expresiones regulares son, digamos, un hueso duro de roer. Utilizan un lenguaje complicado que a veces se hace difícil de entender o de especificar. Por ello, es habitual que el desarrollador tenga ciertos problemas a la hora de crear sus patrones de expresiones regulares para utilizar en el .htaccess. A mi mismo me resultaba muchas veces complicado escribir las reglas, hasta que entendí un poco el lenguaje de expresiones regulares y creé una serie de reglas de uso común, que luego suelo reutilizar en mis archivos .htaccess.

En este artículo pienso proporcionar una serie de ejemplos de reglas htaccess, o de patrones de expresiones regulares que podemos utilizar en nuestras páginas web. No obstante, cabe recordar para los lectores que tenemos diversos recursos interesantes para documentarse sobre estos asuntos en: Sin más, empecemos dando los distintos ejemplos:

Ejemplo 1 de expresión regular para htaccess

RewriteRule ^resultados/pagina_pg([0-9]+)\.php resultados/index.php?&_pagi_pg=$1

Esta regla puede servir bien para paginadores, porque crearmos URLs amigables que tienen el número de la página de resultados que se desea ver. Esta regla redirige todo lo que sea como:

www.midominio.com/resultados/pagina_pg5.php
www.midominio.com/resultados/pagina_pg23.php
www.midominio.com/resultados/pagina_pg19992.php
… y cualquier otra combinación de números, con tantos dígitos como sea necesario.

A direcciones como estas:

www.midominio.com/resultados/index.php?&_pagi_pg=5
www.midominio.com/resultados/index.php?&_pagi_pg=23
www.midominio.com/resultados/index.php?&_pagi_pg=19992

Ejemplo 2 de expresión regular para htaccess

RewriteRule ^platos/letra_([a-z])\.php$ codigo/platos_inicial.php?letra=$1

Esta regla htaccess es parecida a la anterior, sólo que en vez de números gestiona iniciales y además, como no tiene el signo "+", sólo acepta una letra.

Acepta URLs como estas:
www.midominio.com/platos/letra_a.php
www.midominio.com/platos/letra_x.php

Y redirige estas URLs a direcciones como estas:

www.midominio.com/codigo/platos_inicial.php?letra=a
www.midominio.com/codigo/platos_inicial.php?letra=x

Pero no acepta más de una letra en la inicial y sólo acepta minúsculas. Osea, estas direcciones no concordarían con el patrón de expresión regular:

www.midominio.com/platos/letra_xy.php
www.midominio.com/platos/letra_A.php

Ejemplo 3 de expresión regular para htaccess

RewriteRule ^platos/pais_([a-z_-]+)\.php$ codigo/platos_pais.php?nombre_pais=$1

Esta regla avanza un poco en la regla anterior, porque permite cualquier número de caracteres y además también acepta que se coloquen guiones bajos y medios.

Acepta URLs como estas:

www.midominio.com/platos/pais_a.php
www.midominio.com/platos/pais_abc.php
www.midominio.com/platos/pais_a-b_c.php

Estas direcciones las redireccionaría internamente a estas URL:

www.midominio.com/codigo/platos_pais.php?nombre_pais=a
www.midominio.com/codigo/platos_pais.php?nombre_pais=abc
www.midominio.com/codigo/platos_pais.php?nombre_pais=a-b_c

Esta regla no aceptaría nombres de países que tuvieran una mayúscula.

Autor

Miguel Angel Alvarez

Miguel es fundador de DesarrolloWeb.com y la plataforma de formación online EscuelaIT. Comenzó en el mundo del desarrollo web en el año 1997, transformando su hobby en su trabajo.

Compartir

Comentarios

Javier

18/3/2016
Duda sobre funcionamiento
Hola
Perfecta explicacion...y con la misma he conseguido resolver casi mi problema...
A ver si me puedes ayudar. Te cuento..
Me gustaria a ver si se puede en la segunda parte reemplazar un caracter (en mi caso el -) por (un mas +).
Te pongo tres ejemplos
http:/blogOrigen/tag/palabra1 -> http://webdestino.com/?s=palabra1
http:/blogOrigen/tag/palabra1-palabra2 -> http://webdestino.com/?s=palabra1+palabra2
http:/blogOrigen/tag/palabra1-palabra-palabra3 -> http://webdestino.com/?s=palabra1+palabra2+palabra3
Actualmente mi definicion es:
RedirectMatch 301 ^/tag/(.+)/ http://webdestino.com/?s=$1
, y solo me funciona el ejemplo1, los otros dos no...por eso yo querria sustituir el menos por el mas
¿es posible hacer esto?
Muchas Gracias

William Alexander Henao

15/9/2016
Consulta redireccionar url archivo pdf
Buenos días,

Estuve revisando el tutorial y es muy interesante, pero no he sabido aplicarlo a lo siguiente: desde mi página index tengo un enlace a un pdf, la ruta es la siguiente: http://localhost:81/exportar_pdf/cotizaciones/documento.pdf. Me gustaría sabes como hago para que no se muestre ese link sino el siguiente: http://localhost:81/exportar_pdf/documento.pdf. Pero no logro que me funcione.

En el .htacces tengo lo siguiente:
RewriteEngine ON
Rewriterule ^cotizaciones/(.*).pdf$ /exportar_pdf/$1 [L]

Agradezco su ayuda