Ejemplo más complejo de RewriteRule

  • Por
Vemos un segundo caso de redirección de URLs amigables a buscadores hacia URLs con paso de parámetros.
En el anterior capítulo vimos como trasladar con RewriteRule parte de una URL estática a una URL con paso de parámetros. Para ello definíamos en el patrón una agrupación con (+.) y luego la utilizábamos con $1 en la URL redirigida con paso de parámetros. Ver el anterior artículo para más información.

En algunas ocasiones no basta con enviar un parámetro para que la página reciba todos los datos que necesita para mostrar los contenidos específicos.
Si en la expresión regular tuviéramos otros (+.) entonces en la url_destino tendríamos que utilizar $1 para el primer (+.) que haya en la expresión regular y $2 para el segundo, $3 para el tercero y así sucesivamente.

Por ejemplo, aquí podemos ver una sentencia RewriteRule que utiliza dos partes con (+.) para hacer el patrón.

RewriteRule ^agenda/(.+)/(.+)\.html codigo/cita.php?mes=$2&anio=$1

Esta expresión regular quiere decir: Cualquier URL que comience por "agenda/", seguida de cualquier cosa, luego una barra y cualquier otra cosa, acabado en ".html" (fijarse la contrabarra antes de ".html" que es un carácter de escape para indicar que el "." de antes de "html" es un punto, en lugar del codigo especial que suele significar cualquier caracter. Ver el artículo anterior para más explicaciones sobre las expresiones regulares de este estilo.

Como se puede ver, las direcciones estáticas amigables a buscadores no tienen por que finalizar en .php. En este caso finaliza en .html, pero podría acabar de cualquier otra forma, como .htm, .php3, .shtml o en un directorio.

En el caso del ejemplo anterior, una dirección con esta forma:

www.dominio.com/agenda/2006/7

Se hará corresponder con una url_destino así:

www.dominio.com/codigo/cita.php?mes=7&anio=2006

Aunque también podrían haber concordado otros modelos de direcciones como:

www.dominio.com/agenda/05/01
www.dominio.com/agenda/2006/marzo

Será nuestra responsabilidad hacer el tratamiento para que sólo las URL que queremos muestren la página correcta. Veremos en el proximo capítulo cómo hacer este tratamiento de posibles errores y cómo resolver otros posibles problemas del uso del htaccess.

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

Arturo

06/9/2006
Lo mismo estoy equivocado, pero me parece que de...
^agenda/(.+)/(.+)\.html
sobra...
\.html
si queréis que se corresponda con...
www.dominio.com/agenda/2006/7
que es lo propio en urls mejoradas.

Alan

23/11/2007
Hay forma de hacer lo mismo pero tomando como parametro lo primero que se pone luego del dominio?

Ej: www.dominio.com/algo y que "algo" pueda entenderse como un parametro para luego redireccionar a index.php?id=algo. Mi problema esta en que los archivos y los directorios de la raiz me los toma para hacer el redireccionamiento y no me sirve. Hay forma de decirle que no tenga en cuenta archivos y diretorios?
Muchas Gracias

Asteroide

21/8/2009
erro barra final
yo tengo problemas con la barra final de la dirección mejorada, me da error al intentar crear la sintaxis de que se puede poner o no...

esto funciona:
RewriteRule /(.*)/$ /index.php?idioma=$1

esto no:
RewriteRule /(.*)/?$ /index.php?idioma=$1

Alguien sabe por que?

Juan Antonio

22/8/2011
Te felicito
Hola Miguel, tras leer varios artículos sobre el tema he leído el tuyo y me parece de lo mejor. Te explicas con mucha claridad. Te felicito y te doy las gracias.

luis

17/12/2014
coincido con Alan
bien explicado esta /.html indica que el patron debe tener una extension "html", por lo tanto en las URLs de ejemplo q no llevan esas extension no cumplen con el patron

Carmen

13/8/2015
URLS amigables y directorios
Es cierto, a mí me confunde los directorios con las páginas al no acabar con la extensión .php
¿Hay alguna forma que si por ejemplo la página http://www.onlineyoffline.com/servicios/posicionamiento-en-buscadores, borro la última parte y me queda http://www.onlineyoffline.com/servicios/ no la confunda con el directorio?
Muchas gracias

Carlos Vilchez

25/1/2017
Mal redireccionamiento
Tengo problemas con mi .htacces, me esta redireccionando mi subdominio "blog.xxx.com" a "www.xxx.com"; adjunto mi código, no entiendo como arreglarlo para que el blog no sea redireccionado tambien a el index.

-------------------------------------------------
RewriteEngine on
Options -Indexes
RewriteCond %{HTTP_HOST} ^www.hostingweb.com.mx [NC]
RewriteRule ^(.*)$ http://hostingweb.com.mx/$1 [L,R=301]
Redirect 301 /planes_resellers.html http://www.hostingweb.com.mx/reseller-hosting.html
Redirect 301 /servidores_virtuales_vps.html http://www.hostingweb.com.mx/servidores-virtuales-vps.html
Redirect 301 /planes_hosting.html http://www.hostingweb.com.mx/paquetes-hosting.html
Redirect 301 /inicio.html http://www.hostingweb.com.mx/index.php
Redirect 301 /index.html http://www.hostingweb.com.mx/index.php
ErrorDocument 404 /404.html
-------------------------------------------------