Funciones para soporte de URL’s amigables (FriendlyURL)
A la hora de crear una web dinámica accesible, una de las primeras cosas a pensar para el buen uso de las paginas generadas, es poner fácil el acceso a las direcciones URL del sistema. Esto quiere decir que, en vez de poner caracteres especiales como interrogaciones o variables podemos poner texto simple de leer basado en barras, guiones y texto plano sin caracteres especiales. Al conjunto de esta técnica se le denomina FriendlyURL.
Para utilizar esta técnica utilizaremos un truco que nos brinda la configuración de directorios de los servidores Apache y mi lenguaje preferido, PHP.
Lo que realizaremos será crear un archivo llamado .HTTACCESS en el directorio a "virtualizar", el cual sera el inicio de las "URL amigables". Este archivo hace que al introducir unos parámetros en la dirección, estos sean remitidos a una pagina PHP, en nuestro caso index.php, alojada en el mismo directorio. Este archivo procesara la dirección y nos dará los valores captados de la URL como si de una consulta de un GET o un POST se tratara, a partir de los cuales realizaremos lo que necesitemos.
Para agilizar todo ese proceso he creado 3 funciones a partir de las que implementaremos de una manera simple y rápida las FriendlyURL.
La función htaccess() genera el archivo de configuración necesario para actuar en el registro. La función tiene una variables de personalización para poder determina el lugar donde colocaremos el el archivo generado (archivo que sera el puto de partida de la virtualización de las FriendlyURL). Si no se modifica esa variable el archivo se crea en el mismo directorio donde se encuentre el archivo que la ejecute.
-
function htaccess($path = './'){
-
$nombre = $path.'.htaccess';
-
'<IfModule mod_rewrite.c>',
-
' RewriteEngine On',
-
' RewriteCond %{REQUEST_FILENAME} !-d',
-
' RewriteCond %{REQUEST_FILENAME} !-f',
-
' RewriteRule ^(.*)$ index.php/$1 [QSA,L]',
-
'</IfModule>'
-
);
-
} else {
-
$read = true;
-
}
-
return $read;
-
}
La función friendlyurl() da como resultado un array que indica la dirección actual (BASE), el string de variables añadidas (DATOS) y un array de las variables en modo FriendlyURL (DIR).
-
function friendlyurl(){
-
if($_SERVER['PATH_INFO'] != ”){
-
$dir['BASE'] = explode($_SERVER['PATH_INFO'], $_SERVER['REQUEST_URI']); $dir['BASE'] = $dir['BASE'][0];
-
}
-
} else {
-
}
-
} else {
-
$dir['DIR'] = $dir['DATOS'];
-
}
-
-
if($dir['DIR'] != ”){
-
} else {
-
}
-
} else {
-
}
-
return $dir;
-
}
La función traduccionURL() da como resultado la URL que introducimos en la primera variable, pero con el formato especifico de FriendlyURL, de manera que cambia los caracteres especiales, los espacios….
-
function traduccionURL($url) {
-
$url = str_replace(array('á', 'é', 'Ã', 'ó', 'ú', 'ñ'), array('a', 'e', 'i', 'o', 'u', 'n'), $url); #Caracteres especiales latinos
-
$url = preg_replace(array('/[^a-z0-9\-<>]/', '/[\-]+/', '/<[^>]*>/'), array(”, '-', ”), $url); #Caracteres especiales
-
return $url;
-
}
El siguiente ejemplo detecta si el archivo .htaccess existe en el directorio actual, y si no es asà lo crea. En la segunda linea representamos todos los datos obtenidos en la dirección.
me da un fallo(warning) en explode() se podria canviar implode()
$dir['BASE'] = explode($_SERVER['PATH_INFO'], $_SERVER['REQUEST_URI']);
[…] a un comentario de @Jose Luis me he dado cuenta que hay un pequeño problema en las funciones de URL Amigables. Parece que la […]
hola JoseLuis, gracias por el comentario, era un error interno de la función. Ya la tienes corregida y mejorada en http://www.tierra0.com/2008/02/15/url-amigables-version-20/
Hola estaba buscando sobre la tarducción de url y tu función me ha venido de maravilla, de paso he leido el resto de funciones y honestamente no me queda muy claro, todo esto que haces con las funciones no lo hace ya el archivo htaccess con expresiones regulares, traducionendo la url pasada a las variables, tal vez es que no he leido bien el codigo.
Hola Reynier, lo que hago con el código es dividir las variables de la FriendlyUrl en un array que podamos usar.. esto quizá se ve mejor en la versión 2.0 de la función que hace que los resultados sean mucho mas fiables http://www.tierra0.com/2008/02/15/url-amigables-version-20/ si tienes alguna otra duda no dudes en comentarlo. Un saludo..