Ir al contenido

Redireccionar URL’s con apache

El otro día me llegó un correo de Mauricio, un amigo y «cliente» al cual le desarrollé el sitio quimeratv.com y la razón del correo era que necesitaba algunas modificaciones con las direcciones del sitio.

Resulta que cuando sacamos la idea de quimeratv.com pensamos en que sería bueno tener accesibilidad como en otro sitios de redes sociales como myspace.com en donde uno puede tener su dirección tip: myspace.com/gustavo

Para poder tener  esa funcionalidad lo primero que se me ocurrió fue utilizar el archivo htaccess de apache. Apache cuenta con un archivo llamado htaccess donde se guarda la configuración del sitio web, en este es posible utilizar directivas o funciones que le dicen al servidor web hacer algo en especial, una de ellas es RewriteRule.

RewriteRule básicamente nos srive para «reescribir reglas» o mas bien para redireccionar peticiones de un URL a otro. Cuando decidimos meter direcciones «amigables» para los usuarios busqué un poco de documentación de apache y finalmente metí la siguiente condición en el archivo htaccess:

RewriteRule ^([^/]+)/?$ /index.php?option=com_comprofiler&task=userProfile&user=’$1′ [L]

Demonios, ¿Qué significa eso? Bueno que cualquier petición que llegase al servidor cumpliendo cualquier condición sería redireccionada a la página del componente de perfiles del sitio (un plugin de joomla) pasandole como parametro el usuario que concordara precisamente con ese texto es decir:

^([^/]+)/?$

[Mete en una variable cualquier texto ingresado despues del url, ejemplo www.quimeratv.com/gustavo siendo gustavo el término]

/index.php?option=com_comprofiler&task=userProfile&user=’$1′ [L]

[Indica la dirección a la cual será redireccionada nuestra petición y finalmente le pasa la variable que habíamos guardado ($1) como parámetro a dicha url en este caso gustavo ]

Esto indica que si alguien accede a:

http://www.quimeratv.com/gustavo

El sitio será redireccionado a:

http://www.quimeratv.com/index.php?option=com_comprofiler&task=userProfile&user=gustavo

La bronca es que en el correo que me envió Mauricio, una de las modificaciones que requería era que agregará algunas direcciones «friendly» para los enlaces, por ejemplo:

quimeratv.com/qfotos

Esta dirección debería redireccionar a la galería,  el problema fué que yo ya contaba con una regla que le decía a apache que cualquier cosa después de la diagonal era un «usuario» o el username… la solución fué la siguiente:

RewriteRule !^qfotos|qchat$ /index.php?option=com_comprofiler&task=userProfile&user=’$1′

Seguido de la regla que redireccionaría cualquiera de los terminos dentro de la regla anterior, es decir, en la regla anterior dice mas o menos así: «Cualquier cosa que no sea qfotos o qchat se redirecciona a index.php?option=com_comprofiler&task=userProfile&user= pasando como parametro ese término»

Cualquier término que no este dentro de esta regla de apache será direccionado a esa dirección. Ahora, debemos escribir un manejador para qfotos que es el url que NO QUEREMOS que tome la regla anterior:

RewriteRule ^qfotos$ /index.php?option=com_rsgallery2
RewriteRule ^qchat$ /index.php?option=com_wrapper&itemid=89

De ese modo cuando los usuarios entren a quimeratv.com/qfotos serán redireccionados a quimeratv.com/index.php?option=com_rsgallery2

Muy útil el archivo de apache. Les recuerdo que esto no lo pude encontrar en ningún lado pero lo que si leí es que el archivo de configuración de apache soporta expresiones regulares como las de perl por lo tanto es fácil aplicar estas reglas si ya conocen expresiones regulares en algún lenguaje de programación.

Publicado elgeneral

3 Comentarios

  1. Fernando Fernando

    Encontré entre los ejemplos de apache RedirectMatch que tiene casi la misma sintáxis y funciona igual. Lo probe poniendolo dentro de una sección directory
    Acá va el ejemplo.

    Options Indexes FollowSymLinks MultiViews
    AllowOverride None
    RedirectMatch 301 ^/google$ «http://www.google.com/»
    Order allow,deny
    allow from all

    ¿Alguien sabe cual es la diferencia con RewriteRule?

    Saludos, Fernando.

  2. hasta los........ hasta los........

    Estoy es una gilipollezq no vale para nada

  3. aff aff

    vayanse a la contralori de encontre entre los ejemplos de apache que tiene casi la misma sintaxis y funciona igua. lo probe poniendolo dentro de una seccion de direcctorio axa va

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.