Mini-tutorial: URLs amigables (friendly URLs)
Estoy re-diseñando y re-programando Losdelafoto.com y una de las nuevas características serán URLs amigables.
El plan es ir de esto:
http://www.losdelafoto.com/verfolder.php?f=258
a esto:
http://www.losdelafoto.com/folder/258
Luego de un poco de Google y varios golpes a mi teclado, pantalla, escritorio, vaso, hermano (para qué se pone a la par cuando estoy en la compu!!) pues creo que he encontrado una solución bastante simple.
Espero les sirva para aprender o corregirme.
La solución que utilicé es utilizar el milagroso mod_rewrite de Apache. Para esto hay 3 pasos básicos:
1. Verificar que tienes Rewrite activado en tu server
Simple: phpinfo()
2. Crear/modificar tu archivo .htaccess en el root de tu sitio
Algo así quedó mi .htaccess:
RewriteEngine on
RewriteBase /losdelafoto/
RewriteRule !\.(gif|jpg|png|css|js)$ index.php
En RewriteBase tengo “/losdelafoto/” porque localmente acceso al sitio por
http://localhost:81/losdelafoto (Corro apache en el puerto 81 para poder utilizas IIS también)
Cuando esté al aire será solamente “RewriteBase /”
La tercera linea dice que los archivos con esas extensiones los muestre normalmente (si no mostrará index.php al querer ver una imagen por su path directo!!)
Capturar tus variables con PHP
Y en mi index.php capturo mis variables algo así:
$url=strip_tags($_SERVER['REQUEST_URI'])
$url_array=explode("/",$url)
array_shift($url_array)
array_shift($url_array) //solo si es localmente se le quita otro espacio, al aire esta linea se omite
$rpage= isset( $url_array[0] ) && strlen(trim($url_array[0]))>0 ? trim(strtolower($url_array[0])) : "index"
De esta manera tengo un array con cada dato que envío separado por “/”
Ahora mi applicación sabe que archivo incluir según el contenido de $rpage (Ejemplo: “verfotos” para un listado de folders o “folder” para el detalle de un folder, etc.).
Voilá. Houston, tenemos URLs amigables.
Este es solamente una de las mejoras que estoy realizando. Estén atentos que tengo MUCHAS ideas para Losdelafoto.com



March 23rd, 2007 at 8:53 am
Yo aprendí a manejarlas directo en el .htaccess:
RewriteRule ^feed/([a-z0-9]+).png$ index.php?feed=$1 [L]
no es muy elegante, pero funciona XD
March 23rd, 2007 at 3:43 pm
Es otra opcion que consideraré, grazie.
March 23rd, 2007 at 6:51 pm
y esta http://tinyurl.com/ ? xD
March 24th, 2007 at 5:43 am
[…] Mini-tutorial: URLs amigables (friendly URLs) 3 sirgt, pena2, j_aroche […]
July 2nd, 2007 at 5:53 pm
Tengo una duda:
Si quiero pasar de:
sitio.tld/?tema=prueba&numero=10&busca=palabra a
sitio.tld/prueba/numero/?busca=palabra
como jodidos le tendria que hacer para el modrewrite?
Esta charada no muy la entiendo
July 2nd, 2007 at 8:29 pm
@Mario Soto: http://www.sitepoint.com/article/search-engine-friendly-urls
podrias hacerlo con el metodo 1 mostrado ahi, el mas sencillo con PATH_INFO
July 4th, 2007 at 9:46 pm
Gracias. Lo que no entendia era como hacer para redireccionar cualquier cosa a una pagina. entonces tendria que hacer:
RewriteEngine on
RewriteBase /laprueba/
RewriteRule !.$ index.php
esto para que cualquier cosa la pase a index.php incluyendo esto, no lo he logrado pero voy a probarlo. Gracias.
July 4th, 2007 at 10:44 pm
@Mario: No problemo. Pilas pue!
August 8th, 2007 at 6:04 am
Recién comienzo con todo esto. A pesar de esta excelente info y otras que hay en la red no logro hacer marchar algo tan simple como esto:
pagina.php?link=auto
Ej:
RewriteRule ^([^/]*)\.html$ pagina.php?link=$1 [L]
He usado los convertidores online le he dado mil vueltas y nada.
El programa en cuestión esta en “zend” 1-no puedo modificarlo) 2-influye que este en zend?… agradezco alguna pista para seguir investigando.
Gracias
August 8th, 2007 at 9:07 am
@Charly: no me converti en experto de htaccess (todavia), pero en el Grupo PHP de guate podes preguntar de todo:
http://groups.google.com/group/phpgt
December 11th, 2007 at 2:52 pm
que onda
una preguntota se puede configurar un servidor windows para que utilice este tipo de urls? algo asi como el htaccess para apache quiza???
gracias!
December 20th, 2007 at 12:30 am
@lachof: se debe poder, pero la verdad no he investigado como
December 20th, 2007 at 12:30 am
@lachof: si usas apache en windows se puede, pero con IIS no se
December 20th, 2007 at 10:47 am
con IIS si hay un modulo, pero es de pago… mejor usa Apache =P