Llevaba tiempo tratando de aprender como funcionaban las URLs amigables o Friendly URLs, al fin me he puesto con ello y comparto un mini-tutorial sobre como lo hago, creo que es una manera sencilla y funcional:
Seguro que hay formas mejores y otros tutoriales/documentación pero si a alguien le sirve estará genial.
Antes de nada aclarar que no estoy implementando objetos ni ningún framework.
Para el ejemplo comentar que tendré una web con 3 páginas:
Inicio - index.php
Servicios - servicios.php
Eventos - eventos.php
Supongamos que a lo largo de toda la web solamente voy a necesitar recibir un máximo de 5 parámetros por URL, si fuesen necesario más creo que ya podéis intuir como sería la linea que tendríamos que añadir a la parte superior del archivo .htaccess
1. En el archivo .htaccess añadimos el siguiente código:
Código:
Hecho esto vamos al index.php y en el ponemos el siguiente código:RewriteEngine On RewriteRule ^([^/]*)/([^/]*)/([^/]*)/([^/]*)/([^/]*)$ /index.php?a=$1&b=$2&c=$3&d=$4&e=$5 [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^([^/]*)/([^/]*)/([^/]*)/([^/]*)$ /index.php?a=$1&b=$2&c=$3&d=$4 [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^([^/]*)/([^/]*)/([^/]*)$ /index.php?a=$1&b=$2&c=$3 [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^([^/]*)/([^/]*)$ /index.php?a=$1&b=$2 [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^([^/]*)$ /index.php?a=$1 [L]
Código PHP:
<?php
$pagina = false;
$paginas = Array("servicios.php","eventos.php");
foreach($_GET as $get){
if(in_array($get,$paginas)){
include($get);
$pagina = true;
}
}
if($pagina == false){
// Contenido de la página de inicio
}
?>
De esta forma si tenemos la necesidad de recibir variables por $_GET para trabajar con ellas en la página principal también tendremos la opción de recogerlas
Código PHP:
<?php
$mi_variable = $_GET['a'];
$mi segunda_variable = $_GET['b'];
// Y así sucesivamente...
?>
Ahora vamos a suponer que en la página de servicios se muestra un servicio o otro en función del parámetro recibido por URL, teniendo en cuenta que en el primer parámetro de los cinco que abarcamos con la configuración del .htaccess está el nombre de la página sabremos que tenemos cuatro más disponibles, en este caso usaremos el segundo, por tanto en el archivo servicios.php pondremos:
Código PHP:
<?php
$servicio = $_GET['b'];
?>
En la página de eventos supongamos que tenemos que recibir dos parámetros más que serán el mes y la ciudad en que se celebran los eventos que vamos a mostrar, volviendo a aplicar el mismo razonamiento que en el caso anterior vemos que de las cinco variables que podemos llegar a recoger la primera la ocupa la página, por tanto podríamos aplicar el siguiente código:
Código PHP:
<?php
$mes = $_GET['b'];
$ciudad = $_GET['c'];
?>
Para terminar complicaremos un poco más el ejemplo suponiendo que no controlamos el orden en que nos llegan las variables: mes y ciudad
Código PHP:
<?php
// En este ejemplo declaro los arrays de forma manual pero podrían recogerse de la base de datos
$meses = Array("Enero","Febrero","Marzo");
$ciudades = Array("Barcelona","Madrid","París","Londres");
foreach($_GET as $get){
if(in_array($get,$meses)){
$mes = $get;
}else if(in_array($get,$ciudades)){
$ciudad = $get;
}
}
?>
Un saludo