Está usted en Indice > Construcción > Lenguajes > PHP > Lecciones y Paso a Paso > De url extensas a url amigables con Apache y PHP
Construcción
Maletín
Utilidades
Cursos
Promoción
Rentabilidad
Zona Novatos
Foros
Acceso a tu cuenta

De url extensas a url amigables con Apache y PHP (2)

Como se puede apreciar la regla tomara el nombre del script y le quitara la extensión “.php” para tomarlo como un directorio (nótese la parte en negritas):
Rewriterule ^ (.*)/ (.*),(.*)/(.*),(.*)/$ $1.php ?$2=$3&$4=$5
./i ndex.php ?categoria=monitores&productoID=12345
./ index/ categoria,monitores/productoID,12345/

Seguidamente toma el primer par ?valor=variable y lo transfroma en una subcarpeta valor,variable/ :
Rewriterule ^(.*)/ (.*),(.*)/ (.*),(.*)/$ $1.php ?$2=$3 &$4=$5
./index.php ?categoria=monitores &productoID=12345
./index/ categoria,monitores/ productoID,12345/

Y finalmente hace lo propio con el par &valor=variable y lo transforma en una subcarpeta valor,variable/ :
Rewriterule ^(.*)/(.*),(.*)/ (.*),(.*)/ $ $1.php?$2=$3 &$4=$5
./index.php?categoria=monitores &productoID=12345
./index/categoria,monitores/ productoID,12345/

Como ya se habra dado cuenta, los valores antecedidos por el símbolo dólar ( $ ) en la parte de las URL extensas reemplazan a los (.*) de las URL amigables.

Bueno ya tenemos el archivo .htacces que nos permitirá lograr los resultados que deseamos a nivel del servidor, ahora procederemos a crear el script php que nos permita cambiar nuestras URL extensas en amigables sin tener que hacer ninguna modificación directa en los “N” enlaces que posea nuestro sitio web.

Generando el script en php

El script php que se usaremos se encargará básicamente de tomar la URL extensa , si esta ha sido pasada mediante el método GET , y la transformará en una URL amigable a la cual redirecionará usando la función header . Puesto que header redirecionará hacia la misma web, y esto causará lo que se conoce como un bucle infinito, se hará uso de variables de sesión que nos ayuden a evitar tal inconveniente; por tal motivo nuestro script se seccionará en 2 partes: la primera irá en las primeras líneas de todas las páginas a las que aplicaremos el script, y la segunda parte (encargada de limpiar la variable de sesión) irá al final de las páginas. Aclarados los detalles, explicaré mediante comentarios el script php:

  1. < ? php
  2. //Iniciamos o continuamos la sesión encargada de evitar el bucle infinito
  3. session_name ( "url_amigable" ) ;
  4. session_start ( ) ; //Almacenamos datos del server, script y variables (pasadas por GET)
  5. $Server = $_SERVER [ 'SERVER_NAME' ] ;
  6. $Script = $_SERVER [ 'PHP_SELF' ] ;
  7. $Variables = $_SERVER [ 'QUERY_STRING' ] ; //Verificando si tiene variables por GET
  8. //y no se han pasado datos mediante un form por POST
  9. //ya q al redireccionar un post puede ocasionar errores.
  10. //Tambien verificamos que la variable de sesión 'Listo'
  11. //sea diferente a 1, esto nos eviara un bucle infinito.
  12. if ( ! empty ( $Variables ) && $_SERVER [ 'REQUEST_METHOD' ] == 'GET' && $_SESSION [ 'Listo' ] != 1 ) {
  13. //Si tiene variables pasadas por GET se procede a hacer el cambio.
  14. //1. Agrupando $Variables por "variable=valor" en el array $Variable.
  15. $Variable = explode ( "&" , $Variables ) ;
  16. //2. Sustituyendo "=" por "," y concadenandolo en variable $Amigable.
  17. ( $i = 0 ; $i < count ( $Variable ) ; $i ++ ) {
  18. $Amigable .= "/" . str_replace ( "=" , "," , $Variable [ $i ] ) ;
  19. }
  20. //3. Quitando la extension ".php" a $Script para simular un directorio.
  21. $Dir = str_replace ( ".php" , "" , $Script ) ;
  22. //4. Generando la URL Amigable.
  23. $URL_AMIGABLE = "http://" . $Server . $Dir . $Amigable . "/" ;
  24. //5. Colocando la variable de sesión ‘Listo' a 1 para evitar el bucle infinito
  25. // al redireccionar la web.
  26. $_SESSION [ 'Listo' ] = 1 ;
  27. //6. Redireccionando a la url amigable
  28. header ( "Location: $URL_AMIGABLE" ) ;
  29. //7. Exit hará que culmine hasta este punto el script, si no estuviera 'exit'
  30. // el script continuaría ejecutándose y llegaría hasta el final del mismo, es decir,
  31. // a la parte donde colocamos a la variable de sesión ‘Listo' en cero, originandose
  32. // entonces un bucle infinito.
  33. exit ;
  34. } //Cambie $_URL_BASE por la ruta raiz de su web, ya que al simular la url amigable
  35. //directorios, hará que no muestre adecuadamente los origenes de los recursos que
  36. //llama su página web.
  37. $_URL_BASE = "http://" . $Server . "/pruebas/url_amigable/index.php" ;
  38. ?><html>
  39. <head>
  40. <title>URL Amigables</title>
  41. <base href = "< ? echo $_URL_BASE;?>" target= "_top" />
  42. </head>
  43. <body>
  44. <!-- Aquí el contenido de su página web -->
  45. </body>
  46. </html><?php
  47. //Limpia el posible bucle, es decir, se puede volver a hacer el envío.
  48. $_SESSION [ 'Listo' ] = 0 ;
  49. ?>
Recomendaciones finales

Como habrán podido ver el script no es complicado, y la adaptación a una web ya constituida tampoco lo será. Ya he probado la técnica en uno de mis proyectos (de manera local) y me ha funcionado bastante bien.

Lo que sí quiero aclarar es que al momento de testear esta técnica en una url de 5 variables a más me generó errores (básicamente no encuentra la url amigable generada); una url de 4 variables redireciona correctamente, pero si luego de ello refresco el navegador genera el mismo error, es decir, no (re)carga la url amigable.

Mi consejo es que usen esta técnica en una url de 3 a menos de 3 variables pasadas por GET y personalicen este script a sus necesidades. Y como es lógico, les aconsejo bastante informarse más sobre el uso del mod_rewrite en Apache, creanme que les aliviará más de un dolor de cabeza.




Autor: William Wong Garay
http://www.tiperu.com

Usuarios que han visto este tema también han visto...

- Recortar texto en PHP
- Autentificación HTTP con PHP
- Nubes de etiquetas en PHP
- Verificar la existencia de una url
- Codificar contraseñas md5


Versión imprimible - Versión imprimible de este documento
Enviar e-mail - Enviar por e-mail este documento
Publicidad






Cursos de Community Manager

Información legal | Política de Privacidad | Contacte con nosotros

Otro proyecto de Factoría de Internet. Copyright© 2003-2011 Factoría de Internet S.L.. Todos los derechos reservados.


Página generada el 26-05-2012 a las 06:18:17