Si 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.

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:

Esta es tu estructura esqueleto básica.
Edita el archivo .htaccess
Luego, edita al archivo .htaccess con este contenido:
-
RewriteEngine on
-
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:
-
-
?>
Aquí hemos creado una serie que contiene "piezas" de la URL. Para la URL yoursite.com/signup, la serie lucirá así:
-
Array (
-
[0] => "signup"
-
)
Con la URL mencionada anteriormente: yoursite.com/abc/def/ghi/jkl/mno/p/. La serie lucirá así:
-
Array (
-
[0] => "abc",
-
[1] => "def",
-
[2] => "ghi",
-
[3] => "jkl",
-
[4] => "mno",
-
[5] => "p"
-
)
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:
-
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








Miércoles, 28 de Octubre de 2009 a las 13.26
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
Lunes, 2 de Noviembre de 2009 a las 21.45
Excelente..
Jueves, 5 de Noviembre de 2009 a las 20.24
¿Saben de algún sitio confiable donde pueda bajar el servidor Apache y PHP?
Gracias de antemano por su ayuda
Viernes, 6 de Noviembre de 2009 a las 11.20
para windows tenés la página de xampp:
http://www.elwebmaster.com/articulos/xampp-servidor-web-facil-de-instalar
Miércoles, 11 de Noviembre de 2009 a las 11.30
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
Jueves, 12 de Noviembre de 2009 a las 10.53
@giovanni hola, fijate que estas haciendo un include a pages/.php te está faltando el nombre de archivo en el include.