Foros del Web » Programando para Internet » PHP »

Tutorial URLs amigables

Estas en el tema de Tutorial URLs amigables en el foro de PHP en Foros del Web. Buenos días. Llevaba tiempo tratando de aprender como funcionaban las URLs amigables o Friendly URLs, al fin me he puesto con ello y comparto un ...
  #1 (permalink)  
Antiguo 07/01/2016, 12:38
 
Fecha de Ingreso: junio-2011
Ubicación: Barcelona
Mensajes: 240
Antigüedad: 12 años, 10 meses
Puntos: 14
Tutorial URLs amigables

Buenos días.

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:
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]
Hecho esto vamos al index.php y en el ponemos el siguiente código:

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
    
}
?>
Declaramos una variable $pagina que controlará si se ha cargado cualquiera de las páginas que forman la web (o si nos quedamos en la de inicio) y un array $paginas en el que están los nombres de los archivos que van a contener el resto de páginas.

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...
?>
Ejemplo de la URL: www.web.com/variables1/variable2

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'];
?>
Ejemplo de la URL: www.web.com/servicios/hotel

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'];
?>
Ejemplo de la URL: www.web.com/eventos/febrero/barcelona

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;
        }
    }
?>
Tener en cuenta que esto solo se puede hacer si los posibles valores de la variable no van a ser muchas, por ejemplo si tenemos 20 ciudades está bien, si lo hacemos con 3000 usuarios muy probablemente tendremos un problema de rendimiento de la web.

Un saludo

Etiquetas: amigables, tutorial, urls, usuarios, variable
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:33.