que ondas pues hacia mucho que no posteaba nada por aquí, así que hoy voy a poner algo que se me ha hecho bonito con apache y php.
bueno primero que nada vamos a ver que onda con esto de la url semánticas o amigable vamos a explicar un pequeño ejemplo rápido y sencillo.
¿Que son las url Semánticas?
Son aquellas que URLs que son fáciles, legibles para cualquier usuario, que se están usando en la mayoría de sitios web dinámicos, con estas URL’s es mas fácil de recordar la dirección de la noticia que vi el día de ayer, por ejemplo:
http://localhost/?anho=2008¬icias=cruz-azul-es-campeon
# por ejemplo tenemos una pagina que muestra las noticias y el año de esta noticia, esta vez solo tenemos 2 por GET pero podemos tener tantas como queramos y aumentando el numero de variables es mas difícil recordarla y es mas complicado analizarla.
Con las URL semánticas esta URL se ve mejor:
http://localhost/anho/2008/noticias/cruz-azul-es-campeon
¿Como hacemos esto?
Gracias al mod_rewrite de apache es posible interpretar la url de esta forma solo tenemos que crear un archivo de configuración por ejemplo :
~ $ cat ~/public_html/.htaccess
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ panel.php?route=$1 [L,QSA]
ahora
RewriteEngine On
activa la escritura
RewriteCond %{REQUEST_FILENAME} !-f
esta linea nos sirve para identificar si la dirección ingresada no es un archivo y continua
RewriteCond %{REQUEST_FILENAME} !-d
comprobamos si la dirección no es una carpeta
RewriteRule ^(.*)$ index.php?url=$1 [L,QSA]
esta linea es la que le dará el nivel a nuestra aplicación xD
la partiremos poco a poco “RewriteRule” esto se encarga de interpretar las reglas.
“^(.*)$” esto nos indica que cualquier texto después de nuestra url base que en este caso es “localhost” se va a pasar al index.php?url=$1 aquí vamos a pasar toda esta parte “anho/2008/noticias/cruz-azul-es-campeon” que es lo que tendría nuestra variable GET, lo siguiente son modificadores
[QSA]: Si está presente, se mantendrán los valores
query_string que “traiga” la petición, añadiéndose
los que indiquemos (o no), en nuestra regla.
[L]: Parará el proceso de reescritura después de
aplicar la regla donde se encuentre.
[NC]
Este útil modificador hará que las expresiones regulares (o simplemente cadenas literales) que pongamos como patrón sean case-insensitive, es decir, que no se distinga entre mayúsculas y minúsculas. Esto nos puede venir bien muchas veces.
Con mod_rewrite podemos ser mas explícitos por ejemplo:
RewriteRule ^noticias/([a-z_-]+)/([0-9]+)/?$ noticias.php?anho=$1&id=$2 [NC,L]
la url pasa de de ser
http://localhost/noticias.php?anho=2008&id=9
a
http://localhost/noticias/2008/9
ahora en php solo tenemos que tratar nuestra variable GET normal
noticias.php :
echo $_GET[anho];
echo $_GET[id];
para el primer caso podriamos utilizar una clase como esta
index.php:
class url{
function limpiar($valor) {
return preg_replace('/[^a-zA-Z0-9-_]/', '', $valor);
}
public static function get_url ($url){
$url = preg_replace('/\/$/', '', $url);
$partes = explode('/', $url);
$cantPartes = count($partes);
if($cantPartes % 2 != 0)
return false;
$variables = array();
for($c = 0; $c < $cantPartes; $c = $c + 2){
$nombre = self::limpiar($partes[$c]);
$valor = self::limpiar($partes[$c + 1]);
$variables[$nombre] = $valor;
}
return $variables;
}
}
$_GET = url::get_url($_GET[route]);
print_r ($_GET);





Recent Comments