Ver Mensaje Individual
  #15 (permalink)  
Antiguo 14/03/2015, 13:40
josico
 
Fecha de Ingreso: julio-2009
Mensajes: 172
Antigüedad: 14 años, 10 meses
Puntos: 3
Respuesta: [Tutorial] URLs Amigables

Hola MaNuX0218.

Lo primero, darte las gracias por tu aporte ya que el código de tu .htaccess es lo que necesitaba pero, tu código php lo veo demasiado complejo ya que no conseguí ponerlo en marcha más pude simplificarlo y voy a ofrecer sobre tu código otra alternativa para mi juicio más efectiva y practica, amén de explicar más detalladamente el código y como motorizarlo en nuestra página.

Como acabo de decir, el código del archivo. htaccess esta tremendo. Pongamos ese archivo tal cual está en el directorio principal de nuestro alojamiento o dominio. Ahora vamos a crear un index.php y voy a enviar el código completo que luego iré explicando por partes.

Código PHP:
Ver original
  1. $url = explode('/', $_SERVER["REQUEST_URI"]);
  2.  
  3.  
  4.     if($url[1] == 'blog')
  5.     {
  6.  
  7.         // URL: /blog/
  8.  
  9.         if($url[2] == 'categorias')
  10.         {
  11.        
  12.             // URL:  /blog/categorias/
  13.        
  14.             echo 'Categorías del blog';
  15.         }
  16.         else
  17.         if($url[2] == 'tags')
  18.         {
  19.        
  20.             // URL: /blog/tags/
  21.        
  22.             echo 'Tags del blog';
  23.            
  24.         }
  25.         else
  26.         {
  27.        
  28.             $sql='select * from articulo where url="'.$url[2].'"';
  29.             $query=mysql_query($sql);
  30.             if($result=mysql_fetch_array($query))
  31.             {
  32.                
  33.                 // URL: /blog/url_de_articulo/
  34.                
  35.                 echo $result['titulo'];
  36.                
  37.             }
  38.             else
  39.             {
  40.  
  41.                 if(strlen($url[2]) >= 1)
  42.                 {
  43.                     // Enviar el mensaje de error 404 si la URL /blog/ulr-cualquiera/ no existe.
  44.                
  45.                     header("HTTP/1.0 404 Not Found");
  46.                     header("Status: 404 Not Found");
  47.                     include ("error.php");     
  48.                    
  49.                 }
  50.                 else
  51.                 {
  52.                
  53.                     // URL: /blog/
  54.                
  55.                     echo 'Portada del blog donde listar el blog';
  56.                 }
  57.        
  58.                            
  59.            
  60.             }
  61.            
  62.         }
  63.  
  64.  
  65.     }
  66.     else
  67.     if(strlen($url[1]) == 0)
  68.     {
  69.  
  70.         // URL: /
  71.         echo 'Portada de Web';
  72.        
  73.     }
  74.     else
  75.     {
  76.  
  77.         // Enviar el mensaje de error 404 si la URL /url-cualquiera/ no existe.
  78.  
  79.         header("HTTP/1.0 404 Not Found");
  80.         header("Status: 404 Not Found");
  81.         include ("error.php");
  82.        
  83.     }


Voy a dar por hecho que sabéis conectar con la base de datos y que teneis cierto nivel de php para entender el ejemplo, por lo que me centrare en las URLs.

Fijaros en esto “$url[1], $url[2], $url[3]…” la variable $url está sujeta a la constante explode en la que indico que separe la información de la URL con “/”. Por lo tanto:

La variable $url[1] indica el valor sobre /directorio1/
La variable $url[2] indica el valor sobre el directorio2 /directorio1/directorio2/
La variable $url[3] indica el valor sobre el directorio3 /directorio1/directorio2/directorio3/
Y así sucesivamente.

Por lo tanto, si yo con una condición digo que $url[1] es igual a blog, le estoy diciendo es igual a /blog/. Si le digo que $url[1] es igual a blog y la variable $url[2] igual a categorías, pues ejecutara la condición cuando la url sea igual a /blog/categorías/

No puedo explicarlo con un lenguaje más técnico ya que soy un mero aficionado.

Detalles a tener en cuenta.

Si sobre mi ejemplo anterior, si creáis un directorio llamado blog, el directorio prevalece sobre el archivo index.php por lo que no podéis crear un directorio llamado blog y a la vez un blog llamado /blog/.

No sé porque, los mensajes de error 404 no funcionan, pero la solución es sencilla. Añadir el header del ejemplo e incluir el archivo de error cuando queráis mostrar el mensaje de error halla donde no tengas contenido.

Espero que esta ampliación de este gran tutorial al cual estoy realmente agradecido os sirva de gran utilidad.