Como su propio nombre lo indica las URL amigables son aquellas que son más fáciles de recordar para el usuario ya que no están formadas con las acostumbradas cadenas compuestas de variables GET.
También su uso se justifica por fines estratégicos para mejorar el posicionamiento de nuestro sitio web, esto ocurre por una cuestión de semántica debido a que los buscadores favorecen el indexado de este tipo de URL frente a las URL convencionales o no semánticas.
Para crear nuestras URL amigables utilizaremos un módulo de apache llamado
mod_rewrite, el cual nos permitirá reescribir las URL al vuelo.
En este artículo revisaremos solo algunas directivas de este módulo, las que nos permitirán reescribir nuestras URL, pueden ver la documentación completa del módulo en el link oficial.
http://httpd.apache.org/docs/current/mod/mod_rewrite.html
Así se ven las URL convencionales.
http://www.mipagina.com/index.php?seccion=noticias&id_noticia=360
Así se ven las URL amigables.
http://www.mipagina.com/noticias/360/url-amigables
Lo primero que tenemos que hacer crear o editar el archivo .htaccess el cual se encuentra en la raíz de nuestro sitio, el archivo .htaccess es un fichero de configuración utilizado por el servidor apache.
Para que esto funcione debemos tener el módulo rewrite activado en apache, puedes comprobarlo con la función phpinfo() desde PHP.
code: php<?php
phpinfo(INFO_MODULES);
?>
Bien nuestro archivo
.htaccess debe quedar de esta manera.
Options +FollowSymLinks
RewriteEngine on
RewriteBase /
RewriteRule ^.*$ index.php [L]
Las primeras líneas son para configurar algunas directivas de apache como permitir los enlaces simbólicos, activar la reescritura de URL y establecer la base.
Nos centraremos en la línea RewriteRule ^.*$ index.php [L]
^ Denota "el principio" del argumento.
. Un punto (o periodo) indica cualquier carácter arbitrario único.
* Indica que el carácter, cadena o grupo anterior puede estar presente cero o más veces
$ Denota "el fin" del argumento.
[L] Last rule (Última Regla): instruye al servidor para frenar la reescritura tras procesar la directiva precedente.
Entonces
^.*$ este patrón se traduce en que una cadena puede comenzar por cualquier carácter y puede terminar con cualquier carácter, incluso puede ser una cadena vacía.
Lo que logramos hacer es reescribir cualquier URL redirigiéndola al archivo index,php logrando de esta manera tener un control centralizado de nuestro sitio.
Todo lo demás se debe gestionar desde PHP por ejemplo una cadena como la siguiente:
www.mipagina.com/noticias/360/url-amigables
siempre será direccionada a index.php
index.php
code: php<?php
print_r($_SERVER['REQUEST_URI']);
#Imprime
#/noticias/360/url-amigables
?>
Como ven es muy fácil recuperar toda la información de la URL se pueden obtener todos los datos de la petición mediante la variable
$_SERVER['REQUEST_URI'], ya en este punto podemos recomponer las variables GET con absoluta libertad.
index.php
code: php<?php
#print_r($_SERVER['REQUEST_URI']);
$segments = explode('/', $_SERVER['REQUEST_URI']);
$seccion = $segments[1];
$id_noticia = $segments[2];
echo "seccion = $seccion<br />id_noticia = $id_noticia";
#Imprime
#seccion = noticias
#id_noticia = 360
?>
Por lo general el nombre de la noticia es opcional, si se quiere incluir el titulo en la URL lo correcto sería cargar el articulo segun su id desde la base de datos, recuperar el titulo y luego compararlo con el de la URL para asegurarnos que el articulo no ha cambiado de nombre, previniendo de esta manera tener URl duplicadas que son penalizadas por los buscadores en sus resultados.
Existen varias formas de implementar URL amigables en nuestro sitio pero a mi parecer esta es una de las mas simples y eficientes.