¿Qué es Friendly URL?
Las friendly URL o URL amigable son direcciones fáciles de recordar, seguro hemos visto varias páginas web donde en vez de tener una dirección como esta
1 | http://www.mysite.com/product.php?id=12344&active=1 |
Tienes direcciones mucho mas sencillas y entendibles, algo como esto:
1 | http://www.mysite.com/tv-lcd-samsung |
Ventajas de las URL amigables
En primer lugar son más fáciles de entender y memorizar pero aun mas importante los buscadores como google las indexan más fácilmente y dan mejores resultados de búsqueda.
Cómo uso friendly URL en mi sitio PHP
Para eso necesitamos un servidor que además de soportar PHP tenga activo el módulo «Rewrite Rules» (la mayoria de servidores actuales lo tiene) luego creamos un archivo .httaccess con un contenido como este:
1 2 3 4 5 6 7 | Options +FollowSymLinks RewriteEngine On RewriteCond %{SCRIPT_FILENAME} !-d RewriteCond %{SCRIPT_FILENAME} !-f RewriteRule ^productos/(\d+)*$ ./product.php?id=$1 |
Lo que hace este script es enmascarar una dirección como product.php?id=2222 en algo como productos/222/miproducto, además los RewriteCond nos permite verificar que no se aplica si existiera realmente esa carpeta o archivo.
Esa es la forma más simple de usar Friendly URL aunque tambien es posible usando PHP
¿Qué ocurre con las rutas relativas?
Si usas rutas amigables del tipo misitio.com/categoria/miproducto
Las rutas relativas que antes llamaban a las imágenes, hojas de estilo y javascript dejan de funcionar ya que se asume que estás dentro de una carpeta la solución más simple desafortunadamente no funciona bien en IE6(cuando no)
1 |
Esa simple linea de codigo hace que el browser se olvide de tu ruta actual y unicamente use el path que asignas
Ya que la solución más práctica no es crossbrowser hay que cambiar todo a rutas absolutas para no tener que hacerlo a mano para ello creamos una constante con nuestro path absoluto
1 |
Y para agregarlo a nuestros archivos sería
1 | <img src="<?=_path?>miimagen.jpg"> |
Hacerlo no es tan traumático como parece ya que imagino estás usando una web modular y basta modificar unos cuantos archivos sin web modular no veo como puedas usar url amigable
Que tal Miguel, recien empiezo con esto de las friendly url, intento hacer algo como
producto?id=222&otra=x
en producto/222/x/ como seria eso posible?
Como siempre, gracias de antemano
Hey que tal creo que ya solucione el problema anterior, solo que ahora realizo un ejemplo un poco mas complejo, ahora la duda es, como se manejan las rutas de los css y js ? .
Cual es la manera mas sencilla para no realizar demasiados cambios? (en cuanto a rutas), suponiendo que adapto esto a un proyecto
Gracias nuevamente.
Creas un archivo de configurarcion con una constante que contenga la ruta absoluta de tu sitio web de esa forma podrás hacer qu el css, javascript sea invocaco de la ruta correcta. Otra forma es via html pero base path no funciona en IE6
OK. gracias buscare al respecto
Hola Miguel. Estoy intentando hacer el cambio a friendly urls, pero la web que intento modificar está en un servidor IIS. He leido en algun foro/blog que no va a funcionar el cambio porque mi servidor IIS no leerá las rewritteRules que comentas en tu artículo en el .httaccess. Como puedo solucionarlo? Gracias.
Lamentablemente el .httacces es para un servidor Apache unicamente sin embargo IIS tiene su propio module rewrite hay que instalar el dll IsapiRewrite4.dll y tendrías que revisar la documentación ya que funciona un poco distintas las reglas
Hola tengo este problema, en un sitio modular, tengo una de las páginas que necesita paginación entonces le hago esto:
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/(.*)$ index.php?modulo=$1&cur=$2 [L]
RewriteRule ^(.*)$ index.php?modulo=$1 [L]
Con el primer RewriteRule, que es el que contiene el paginado, se me arruina todo, la página aparece como que no existe.
Si me pueden dar una ayuda les agradezco.
Necesito ayuda para crear una friendly url no tengo ni idea soy autodidacta pero esto se me queda lejos…una ayuda que sea sencilla. No se lo que tengo que hacer.
Gracias.
hey!! men, muchas gracias funcionó perfecto jejeje pero me toco mirar más opciones para que funcione en un sitio dinámico ya que el CMS debe funcionar al 100%… pero gracias buen aporte…