31
El tema de las Urls Amigables (friendly urls) esta relacionado con el SEO y el posicionamiento Web en los diversos buscadores algo que se a hablado hasta el cansancio, los métodos de poder construirlas son como los colores ( para todos los gustos ).
En la actualidad las Urls Amigables (friendly urls) no es una simple moda Web 2, si no que en sistemas de gestión de contenidos y servicios prestigiosos como Blogger, Drupal, Wordpress y muchos más lo tienen implementado. ¿Pero cual es el mejor? ya de por si se sabe que implementando Urls Amigables en tus paginas o proyectos Web estas a 2 o 3 pasos arriba que otras paginas que usan las Urls tradicionales muy aparte de la publicidad o herramientas de posicionamiento que usen.
Al principio no todos podían usar Urls Amigables en sus sitios, mucho dependía de tener activado el mod_rewrite , aun que WordPress fue un paso mas allá y nos dio una solución como nos comentaba Andres Nieto a principios de año desconozco si WordPress fue el pionero en esto.
En el posicionamiento Web 2 de los mejores son Blogger y Wordpress por el método que usan aunque este ultimo con la opción de personalizar la estructura de la url a nuestro gusto por ser una herramienta de construcción de blogs de codigo abierto que a permitido que crezca gracias a la comunidad que lo rodea.
Las hasta 3 formas mas conocidas de construir las Urls Amigables es mediante PATH_INFO, mediante directivas en el archivo .htaccess como nos explica manu en TuFunción o mediante peticiones $_GET como nos enseña William Wong Garay en MaestrosDelWeb.
Todos estos métodos construyen Urls Amigables pero tienen sus limitaciones.
- PATH_INFO no se puede expandir la estructura de Urls Amigables
- mod_rewrite y .htaccess mientras mas directivas se ralentiza el servidor
- Metodo $_GET limite del numero de variables a enviar como explica Willy
¿Cual método usa Wordpress? si observamos su archivo .htaccess solo utiliza unas directivas simples.
# BEGIN WordPress
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
# END WordPress
El archivo clave es wp-includes/rewrite.php (WP_Rewrite API) el encargado de identificar las peticiones que se hacen en el sistema.
¿Pero como trabaja? muy simple con reglas muy similares a las que se usan en el .htaccess con diferencia que estas se procesan en un archivo php y acelerando el proceso.
¿Pero como implementarlo en una pagina que no sea WordPress? … destripando el codigo he logrado desarrollar una clase muy básica basada en WP_Rewrite API que nos permitirá personalizar la estructura de las Urls amigables al estilo Wordpress.
Pueden verlo en funcionamiento en http://web2dev.calinsoft.com/urls-amigables .
El funcionamiento es básico la regla esta compuesta de una Expresion Regular y la marca que vendría hacer los parámetros a usar.
/// para poder obtener una estructura /2008/08/28/urls-amigables-facilmente
$this->rules["([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/(.+?)/?$"]="y=\$matches[1]&m=\$matches[2]&d=\$matches[3]&nslug=\$matches[4]";
//la cual mediante una identificación y parseo previo obtendríamos los valores listo para usarlos segun lo deseemos
Array
(
[y] => 2008
[m] => 08
[d] => 28
[nslug] => urls-amigables-facilmente
)
Los interesados pueden comentar si creen que es un buen método, tratare de afinar el script y lo publicare en estos días para mis lectores de Feed tendrán una sorpresa.
Etiquetado: htaccess | mod_rewrite | Programación Web | Proyectos | Scripts | SEO | Wordpress

















Interesante, verdaderamente es necesario implementar esto en cualquier sitio web, hasta ahora solo he trabajado con mod_rewrite y sentencias en un archivo .htaccess, pero tu diste un paso mas. permiteme felicitarte, ahora solo espero que afines el codigo… Ya espero la sorpresa…
Desgraciadamente la documentación de la API de WP_Rewrite es muy pobre así como su usabilidad (ya que fue diseñada para satisfacer las necesidades internas de WP), por lo que el método de la revisión de REQUEST_URI/PATH_INFO sigue siendo el mejor a la hora de desarrollar plugins.
Es una lastima que este articulo también este escueto y realmente no toque los verdaderos desmanes provocados al usar la WP API (por que mas que hacer URLs amigable con ella, el chiste esta en extender las de WordPress a través de ella, cosa que por experiencia les puedo decir no es nada fácil).
Saludos
¿No se a que te refieres con Desmanes? yo trate de satisfacer una necesidad, que era usar el mismo metodo que usaba wordpress.
y claro que es extendible el mismo wordpress es extendible, esta clase lo puedes implementar no solo en blogs o cms si no en aplicaciones web o a ¿que te refieres? si nos dieras un ejemplo de lo que quieres lograr creo que todos entenderiamos tu punto de vista
.
Saludos
Cuando se trata de crear tus propias Permalinks es muy fácil (como este y otros artículos -incluidos el codex-).
Pero cuando quieres extender los de WordPress digamos para mejorar algo como /%postname%/%algo%/ la clase WP_Rewrite se vuelve una maraña y en mas de la mitad de las veces que la puedes necesitar encontraras un camino mas fácil al hacer una búsqueda en REQUEST_URI y de PATH_INFO.
Creo que mal interpretaste mi comentario, tu articulo de nota el uso externo de la API WP_Rewrite para mejorar tu aplicación web, pero en si dentro de WP la clase es prácticamente solo para WP, no puedes extender sin causar en tu código una maraña poco administrable.
Saludos
El código que pones del .htaccess lo que hace es comprobar que el recurso que has pedido por url existe, en caso contrario te redirecciona a index.php donde se procesa.
Así, por ejemplo si tu articulos son http://dominio.es/articulos/... y creas una carpeta llamada /articulos verás como las url amigables dejan de funcionar.
No se si esta técnica, creo que se llama lazy urls, llegó con WP o estaba de antes, por éste la popularaizo bastante.
Implementar esto en nuestro proyecto es muy sencillo, usando el mismo código en el .htaccess que WP nos queda implementar la lógica en el index.php. En este archivo consultamos la url que nos pasa el usuario y actuamos en consecuencia.
Si usamos este método hay que tener cuidado porque “desaparecen” los errores 404, ya que si no encuentra algo te mandará siempre al fichero index.php. Tendremos que controlar estos errores desde el mismo index.php, si nos pasan algo que no conocemos habrá que devolver una página de error (con su correspondiente cabecera 404)
Muy buena alternativa la de WordPress sin duda, y muy buen el trabajo tuyo de hacer esta tecnica sin necesidad del dichoso administrador de contenido.Saludos!
@Anonimo: Ahora si entiendo y estoy de acuerdo contigo pero creo que no se puede expander a más por el simple echo que podria crear conflictos con plugins o con el mismo core de wordpress y por ende abrir brechas en la seguridad.
@Miguel Ángel: El codigo de .htaccess ovbiamente es para usarlo en la raiz / si fuera adentro de una carpeta articulos.
RewriteBase /articulos/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /articulos/index.php [L]
o salvo que te refieras a implementar also similar a esto
http://web2developement.calinsoft.com/urls-amigables/articulo/urls-amigables-facilmente.html
dale una chequeada si eso fue tu duda.
Y por lo de los errores 404 eso se controlaria cuando se reciba el valor claro una validación previa, haber publicado este articulo fue para recibir criticas para mejorar el script y asi sea una alternativa muy buena.
Saludos
Que es eso Dios Mío, tanta información en mi cabeza me da migraña. Siempre lo usaba pero con este api ahora tendrán una alternativa más para poder desarrollar portales alternativos.
Perpo que va!! si es fácil de entender REALMENTE FACIL, solo que cuidadoy pasen todos los archivos por el parser de WP. deben excluir algunos
RewriteBase /
RewriteCond %{REQUEST_URI} !(\/articulos\/)|(\.jpg)|(\.png)|(\.css)|(\.js)|(\/etcetcetc\/)$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
Me he suscrito a tu Feed esperando tu sorpresa.
Muy útil tu código, me ha servido para inspirarme a la hora de mejorar lo que ya tenia hecho para el tema de las url amigables.
Pero tengo algunas dudas: Que hago con los demas archivos (las imágenes, las hojas de estilo, los .js,…), supongo que tendré que procesarlos en el index.php, pero como? Y no supondria esto un consumo excesivo?
PD: Muy interesante tu blog, va para mi lector de feed
Saludos.
Muy buen articulo Carlos, se muy bien que fue escrito hace algunos dias, pero nunca es tarde. Muchas gracias por los archivos….
Con Mozilla Firefox 3.5.6 y Windows NT