Micaela 28 de octubre de 2009 a las 11.34
   Imprimir artículo
elWebmaster.com

PHP: Optimiza las URL de tu sitio web


phpelefante1Si no utilizas un CMS personalizado para programar sitios web, es importante saber un poco sobre cómo lograr que las páginas de tu sitio tengan URLs limpias.

El problema es ¬ŅC√≥mo empezar? Aqu√≠ tenemos una configuraci√≥n b√°sica para comenzar con esto. Siempre y cuando tu servidor funcione con Apache y PHP.

1414

En la ruta de tu directorio (en la captura de pantalla de arriba estar√≠a en el directorio “html”), comienza creando estos archivos y carpetas:

1415

Esta es tu estructura esqueleto b√°sica.

Edita el archivo .htaccess

Luego, edita al archivo .htaccess con este contenido:

  1. RewriteEngine on
  2. RewriteRule !\.(gif|jpg|ico|css|js|txt)$ index.php

Aquí hemos habilitado mod_rewrite, qué es un poderoso transformador de URL. Lo que hemos hecho es decirle al sistema que redirija toda petición a index.php, a excepción de ciertos archivos con determinadas extensiones (aquellos que queremos que sean accedidos normalmente).

Por lo que si visito esta URL en tu sitio:

yoursite.com/abc/def/ghi/jkl/mno/p/

Cargará  index.php. Cambiala un poco:

yoursite.com/123/456/789/0/

Seguirá cargando index.php. Todo cargará index.php, a excepción de un requerimiento de un archivo para esas extensiones.

Como pueden ver, más allá de qué requerimiento de directorio se haga, se carga el mismo script.

Edita el archivo index.php

Para comenzar tu sitio, probablemente desearás algunas páginas ahí, con URLs limpias, tales como:

yoursite.com/about

o:

yoursite.com/signup

Abre index.php, y comienza con este código:

  1. if (substr($_SERVER["REQUEST_URI"], -1, 1) != "/") $_SERVER["REQUEST_URI"] .= "/";
  2. $url_array = explode("/", $_SERVER["REQUEST_URI"]);
  3. array_shift($url_array);
  4. array_pop($url_array);
  5.  
  6. ?>

Aqu√≠ hemos creado una serie que contiene “piezas” de la URL. Para la URL yoursite.com/signup, la serie lucir√° as√≠:

  1. Array (
  2. [0] => "signup"
  3. )

Con la URL mencionada anteriormente: yoursite.com/abc/def/ghi/jkl/mno/p/. La serie lucirá así:

  1. Array (
  2. [0] => "abc",
  3. [1] => "def",
  4. [2] => "ghi",
  5. [3] => "jkl",
  6. [4] => "mno",
  7. [5] => "p"
  8. )

Como pueden ver, cada “carpeta” en la URL es un √≠tem separado de la serie. Esto nos permitir√° incluir la p√°gina necesaria, basado en la ruta del directorio de la URL.

A√Īade el include

Ahora, incluyamos el contenido del archivo, basado en la URL.

En index.php, a√Īade esta l√≠nea:

  1. include "includes/" . $url_array[0] . ".php";

¬ŅRecuerdas nuestro $url_array de arriba? Tomamos el primer directorio de la URL (el que est√°s m√°s a la izquierda), y lo utilizamos para descifrar qu√© archivo incluir.

En nuestro directorio “includes” (el directorio creado inicialmente), crea un archivo llamado “signup.php”.

Ahora, cada vez que alguien visite yoursite.com/signup, el archivo signup.php se inlcuirá. Si especifican un directorio más particular, seguirá incluyendo sólo signup.php.

¡Ya tienes URLs limpias con una mínima programación!

Fuente: Pain in the Tech


Enviar a Del.icio.us Enviar a Meneame Enviar a Digg Enviar a Fresqui Enviar a Enchilame

Comentarios (6)

  1. Christian dice:

    Interesante explicaci√≥n, me parece bien “For dummies” (y hasta para mi jejeje)
    Es interesante la potencia que se puede lograr con simplemente hacer uso de recursos del servidor Apache

  2. Alfredo dice:

    Excelente..

  3. Antonio Montell dice:

    ¬ŅSaben de alg√ļn sitio confiable donde pueda bajar el servidor Apache y PHP?
    Gracias de antemano por su ayuda

  4. Justi dice:

    para windows tenés la página de xampp:
    http://www.elwebmaster.com/articulos/xampp-servidor-web-facil-de-instalar

  5. Giovanni Liza dice:

    He probado el codigo indicado en una de mis paginas, pero que pasa cuando pongo la direccion limpia, es decir http://www.misite.com y me sale este error

    Warning: include(pages/.php) [function.include]: failed to open stream: No such file or directory in /home/viptrans/public_html/index.php on line 16

    Warning: include(pages/.php) [function.include]: failed to open stream: No such file or directory in /home/viptrans/public_html/index.php on line 16

    Warning: include() [function.include]: Failed opening ‘pages/.php’ for inclusion (include_path=’.:/usr/lib/php:/usr/local/lib/php’) in /home/viptrans/public_html/index.php on line 16

  6. Justi dice:

    @giovanni hola, fijate que estas haciendo un include a pages/.php te est√° faltando el nombre de archivo en el include.

Deja tu opinión

© 2007 - 2008 elWebmaster.com | Powered by Wordpress | Diseño CSS y XHTML válido. | Algunos íconos basados en FamFamFam Mini
Acceder