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. [0] => "signup"
  2. )

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

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

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
Iniciar sesión