domingo, 9 de mayo de 2010

URL amigables o semánticas

¿Qué son las URL amigables?
Las URL Amigables son las URL usadas por sitios web dinámicos para ser recordables por los usuarios, ilustrativas, y fáciles de indexar por los buscadores. Lo explico mejor a continuación y con ejemplos.
Explícame con un ejemplo
Las URL son para la el internet como los números para la telefonía; es la forma de acceder a un recurso único en la red de redes (Internet). Las páginas dinámicas introdujeron la posibilidad interactiva con los usuarios, esta interacción genera nombre de URL con variables poco ilustrativas, difíciles de recodar y que dicen poco a los buscadores a cerca del recurso que se muestra.

Por ejemplo:
http://zazua.com/details.php?id=34
Para los usuario que desconocen lo que significa esta URL, simplemente se está haciendo uso de una variable llamada: (id), en este caso es el (identificador) de un artículo, que tiene valor 34 en dicho ejemplo. Esta es una web que muestra un artículo identificado por el número 34.
Pero esta URL es fácil de recordar, una URL puede tener decenas de variables. La URL que muestro a continuación es aun más complicada de recordar:
http://zazua.com/details.php?id=34&view=1&user=user1

La solución a este gran inconveniente es la utilización de URL amigables. A continuación de muestra el ejemplo inicial con su respectiva URL amigable:
http://zazua.com/details.php?id=34
http://zazua.com/article/el-amor-todo-lo-puede--34.html

Estas 2 URL muestran el mismo artículo, sin embargo la segunda es una URL amigable, vea que tiene una porción de texto que claramente deja ver de que se trata el artículo, es mas fácil de recordar, es mas ilustrativa pues da a conocer su contenido, y es mucho más posicional para los buscadores como Google, los cuales tienen en cuenta el título de la web en correspondencia con su contenido y otros muchos aspectos.

Como implementar URL amigables
Si usas un servidor Apache como es el caso de nuestro equipo Moisés Soft , en la mayoría de los trabajos web realizados , la forma es a través del archivo .htaccess (hypertext access) . Este es un archivo que permite definir directivas de configuración y comportamiento del directorio donde se encuentre sin ir al archivo de configuración del apache. Para usarlo debes tener habilitado del modulo rewrite: rewrite_module.

El objetivo de este articulo no es explicar a fondo el funcionamiento del archivo .htaccess en profundidad. Unos de los usos de este archivo es, precisamente la construcción de URL semánticas a partir de reglas , pero tiene muchos otros:
- Restringir el acceso a directorios
- Restringir el acceso a IPs o ISPs
- Manejar errores del servidor.
- Crear redirecciones estáticas
- Controlar Cache
- Evitar hotlink
- Forzar Dominio sin WWW
- Creación de URLs Amigables (semánticas)

Quieres ver un sencillo ejemplo:
Un ejemplo sencillo de .htaccess , en el cual programamos las reglas del ejemplo inicial:
http://zazua.com/details.php?id=34 (URL Real)
http://zazua.com/article/el-amor-todo-lo-puede--34.html (URL amigable)

Lo que deberíamos escribir en el archivo .htaccess , para hacer válido el ejemplo anterior es lo siquiente:
RewriteRule ^article/(.+)--(.+)\.html details.php?id=$2
Voy a explicar de forma rápida que significa esto que hemos escrito.
Usamos la directiva RewriteRule , a esta directiva se le pasa una regla [article/(.+)--(.+)\.html] la cual puede ser una expresión regular como de lo cual estaremos hablado en otro artículo. Cuando dicha expresión regular se cumple, entonces internamente se va al segundo parámetro que es la URL real.

¿Que esta diciendo esta expresión regular?
Lo que dice esta expresión es que todoas las URL que comiencen por la palabra “article” luego un “/” , luego lo que significa “(.+)” es que puede venir cualquier texto luego dos signos de menos “--” , y por último cualquier cosa “(.+)” seguida de la terminación (.html) , como el punto “.” es un carácter reservado en las expresiones regulares se le antepone un “\” , para indicar que lo que se espera es un punto “.”

Falta explicar que significa la segunda directiva: details.php?id=$2
Si recuerdan la URL real tenía esta misma forma:
http://zazua.com/details.php?id=34
Lo único que ven distinto es el signo de dólar con un dos ($2), que lo que significa es que se le está dando el valor lo que aparezca en el segundo “(.+)” en la expresión regular.

Esquemáticamente lo que estamos haciendo es lo siguiente:
http://zazua.com/article/el-amor-todo-lo-puede--34.html
http://zazua.com/details.php?id=34
Vea como esta en rojo el ID en la URL amigable, lo estamos pasando a la URL real a través de la expresión regular
Ahora en ves que poner el Link al artículo 34 así:
http://zazua.com/details.php?id=34
Podemos ponerlo:

http://zazua.com/article/el-amor-todo-lo-puede--34.html
Lo que sucederá internamente es que re-direcciona para http://zazua.com/details.php?id=34 sin que el usuario ni el buscado se percate lo que está sucediendo pues la URL en el navegador es la primea y no la segunda.
Una aclaración es que en la parte en rojo del link de abajo, que es lo que le da la semántica a la URL puede ser cualquier texto, pero este texto no debe tener espacios en blanco ni caracteres no permitidos. Hace poco tiempo que las URL y los estándares ya permiten el uso de caracteres de diferentes lenguajes, pero aun así use solo caracteres sin acentos, y para separar las palabras use el signo de menos.
http://zazua.com/article/el-amor-todo-lo-puede--34.html

¿Cómo generar URL amigables de forma Automática?
Es muy simple, solo debes ser cuidadoso de no permitir que se te introduzcan caracteres no deseados en la URL. Para ello debes filtrar el texto que deseas poner en la URL.

El texto del ejemplo es: “El amor lo puede todo” y hay que convertirlo a “el-amor-todo-lo-puede” , eliminamos los espacios , las mayúsculas , los acentos en vocales y letras , como por ejemplo la “ñ” la cambiamos por la “n” la “ó” por “o”.
A continuación el código que usa Moisés Soft en el nuestro Framework: DIOS PHP

static function GetUrlAmigable($url)
{
$url = $titulo;
$url = strtolower($url);
// caracteres especiales latinos
$find = array('á', 'é', 'í', 'ó', 'ú', 'ñ');
$repl = array('a', 'e', 'i', 'o', 'u', 'n');
$url = str_replace ($find, $repl, $url);

// Los guiones
$find = array(' ', '&', '\r\n', '\n', '+');
$url = str_replace ($find, '-', $url);
// Reemplazamos demás caracteres especiales por “-”
$find = array('/[^a-z0-9\-<>]/', '/[\-]+/', '/<[^>]*>/');
$repl = array('', '-', '');
$url = preg_replace ($find, $repl, $url);
return $url;
}

GetUrlAmigable(“El amor lo puede todo”) == “el-amor-todo-lo-puede”

Espero que les sea útil este artículo y fijese que este blog y este articulo usan todo lo que hemos explicado si te fijas la URL es amigable: http://moises-soft.blogspot.com/2010/05/url-amigables-o-semanticas.html
Deje su comentario, ante cualquier duda o sugerencia.

No hay comentarios:

Publicar un comentario