« Disenamos.com | Página de inicio | Basta! »

12.05.2005

Usando el mod_rewrite de Apache

Si bien el buen Fede (no confundir con el Federico que no tiene nada de bueno :P) ya hablo de sus friendly URLs hace algun tiempo, dejo mi ejemplo y explicacion mas al estilo hagalo usted mismo con el que tanto me identifico :P

Que es mod_rewrite

Digamos que el Apache toma la URL ingresada en el navegador, y la transforma en otra, siguiendo ciertos parametros, de forma totalmente invisible y limpia para el cliente (osea, al cliente no le cambia la URL que ingreso).

Como lo hace? ni idea :P. Pero su funcionamiento es muy sencillo. y se logra en 3 pasos:

  1. Habilitar el mod_rewrite en el httpd.conf de apache
  2. Crear un documento .htaccess en el directorio donde vamos a tener friendly URLs
  3. Crear la logica que interpretara la URL

Para el primer paso, bastara con descomentar la linea que dice:

#LoadModule rewrite_module modules/mod_rewrite.so
Con solo quitar el # sera suficiente (y reiniciar Apache, no?).

Para el segundo paso, crear un archivo que se llame .htaccess con este codigo:

RewriteEngine on
RewriteRule post/([0-9-a-z-A-Z-_]+) index.php?post_id=$1
RewriteRule user/([0-9-a-z-A-Z-_]+) index.php?user_id=$1
Dejar el archivo en el directorio donde tambien pondremos al PHP (index.php en este caso) que leera esa variable:
print ("$post_id");
print ("$user_id");

Es todo! sino anda, saben donde quejarse ... en lo de Fede :P.

Para probarlo, suponiendo que colocaron los archivos en el directorio raiz de su sitio, deben ir a www.susitio.com/post/cualquier_cosa_que_pongan_va_a_aparecer_en_el_Archivo ;)

23:05 Anotado en Programación | Permalink

Comentarios

lastima que en mi server windows, no hay apache :(

aun asi, es muy interesante este post.

Anotado por: stan | 13.05.2005

Oh! como que no usas Apache? Usas IIS entonces?
Si es asi, se de alguien que estaba buscando esto para ese sistema... (alguien: Pablo Viojo ;)).

Anotado por: Diego | 13.05.2005

Stan, justo ayer me encontre con algo parecido al mod_rewrite para el IIS (open source) ahora no me acuerdo como se llamaba pero mañana te paso el nombre.

Anotado por: Pablo Viojo | 13.05.2005

Jaja, ese soy yo Diego, encontre "eso" (justo ahora no me acuerdo el link, que desgracia). Es opensource y soporta las mismas expresiones que el mod_rewrite ya que utiliza unas funciones similares en potencia a las que usa el Apache.
En realidad no lo pude hacer funcionar, pero creo que esto es más bien un problema de incapacidad propia y de falta de tiempo que del programa.

Anotado por: Pablo Viojo | 13.05.2005

Juas, era custion de apretar el enviar en el post anterior para que apareciera.

http://www.iistoolshed.com/

Se llama URL Rewrite (y si, como si no?). Si te funciona bien me avisas a ver como se hace :D jeje

Anotado por: Pablo Viojo | 13.05.2005

Al margen: Che! Federico es puro amor! No sean crueles con él. :P

Anotado por: Federico | 13.05.2005

chido, voy a leer haber que tal, thanks por el link pablo :P y ya no hablen mal del federico ni del diego, que esos dos nombres hay un friego en la blogosfera, pero haber, cuantos Estanislao hay en la blogosfera... oficialmente solo yo :P

Anotado por: stan | 13.05.2005

La verdad que es un invento genial. No sólo hace urls usables, sino que tambien estándares. Sin nombrar la indexación en los buscadores. Es lo primero que voy a hacer apenas me cambie de hosting :P

Anotado por: Lucas | 13.05.2005

Quería acotar nomás, que Apache 1.2 trabaja con expresiones regualres POSIX por lo que se pueden hacer miles y miles de cosas con mod_rewrite.

El que esté interesado: http://httpd.apache.org/docs/mod/mod_rewrite.html y http://www.fedeblog.com.ar/files/expresiones_regulares.html

Suerte
Fede

Anotado por: Fede | 13.05.2005

Tengo una duda todavia, como el navegador interpreta que lo que pongamos corresponde a tal o cual post?

Los friendly URLs de Fede (y mios tmb ^.^) tiene el ID del post en la URL...

Anotado por: [NiRVaNa] | 15.05.2005

El navegador no interpreta nada, porque son modificaciones que se dan a nivel del servidor. El navegador pasa el url que tu ingresaste y el modulo encargado de la reescritura es el que hace el cambio.

Anotado por: Pablo Viojo | 15.05.2005

Exactamente, entonces el apache te transforma la url en algo como sitio.com/index.php?post=nombre_del_post.
En index.php tenes un script que captura esa variable, busca ese post y te lo muestra, es requete simple :).

Anotado por: Diego | 15.05.2005

Jeje, algo asi como "one index.php to rule them all", LOL :D

Yo lo que hago habitualmente es tener un archivo index.php que actua como "receptor" de todos los pedidos y en funcion de los parametros que recibe llama a otros archivos que es donde se procesa la lógica correspondiente pero esto depende un poco del tipo de aplicacion que quieras desarrollar. Si es para manejar posts, creo que tener todo el codigo en un mismo archivo estaría bien.
De ultima es una cuestión de comodidad simplemente, yo prefiero tener codigo separado en distintos archivos

Anotado por: Pablo Viojo | 16.05.2005

No, claro que el include te facilita muchisimo la tarea, sino seria un verdadero caos manejar todo desde un unico archivo!
Ya demasiado que debo conformarme sin haber hecho jamas mi aplicacion de modulos en PHP... al menos usando includes se logra un codigo mas limpio!
Lo cual me da tema para otro post... :D

Anotado por: Diego | 16.05.2005

mmm para códigos limpios y claros seria mejor evitar el uso de acciones limitadas bajo Register Globas. Recuperar variables enviadas por post , url etc.. , utilizando variables a pelo '$variable' es aparte de inseguro una cerdada.
Para ello apartir de PHP4.X aparecieron las SUPER GLOBALES, las cuales aparte de seguras funcion SIEMPRE de tal forma que nuestros scripts seran mucho más portables, seguro y legibles sin depender de la configuracion de php.ini.

Deberias mirartelo ;) un salud ( gracias por este post, me ha ayudado )

Anotado por: Blid | 31.05.2005

Pues he intentado aplicar el mod_rewrite en mi sitio, supuestamente me aparece como cargado.

Pero no pude hacerlo funcionar, algo le falta :S

Anotado por: stan | 02.06.2005

Pues a mi tampoco me funciona: ni en local ni en la url dada.

¿Qué me sujeris para:?

http://www.autocasionextremadura.com/catalogo/ficha_anuncio.php?ref=51

y

http://www.autocasionextremadura.com/catalogo/ficha.php?refweb=2170

Véase el complicado añadido: cada script (fichas) carga a su vez por url la foto.

Mi ensayo ha sido algo como:

RewriteEngine On
RewriteBase /catalogo/
RewriteRule ^ficha-([0-9]*).html$ ficha_anuncio.php?ref=$1

Soltado en el raiz.

a ver, a ver.

Anotado por: pepeitor | 05.12.2005

AtSiam.com is a full-service travel agency offering online reservations for hotels and resorts at discounted prices for destinations in Thailand.

Anotado por: thailand hotels | 23.01.2006

Pues ya esta!!!!!

Lo veis en www.autocasionextremadura.com

Mod_rewrite combinado con Site Map de Google: combinación que ofrece resultados!!!

Anotado por: Pepeitor | 11.02.2006

Dejar un comentario