Esta noche he estado buscando información sobre la manera de sustituir las URLs “feas”, llenas de parámetros o con los nombres de los ficheros, por otras del estilo “/funcion/usuario/contenido/”, como la que usa Twitter con sus usuarios. He visto que para mejorar el aspecto de las URLs se puede emplear el módulo de Apache rewrite_module y la modificación del fichero .htaccess
Para empezar tenemos que crear, en caso de que no exista ya, este fichero en el mismo directorio donde se encuentre la página de inicio de nuestra página web (index.php o index.html o lo que sea).
Dentro del fichero tenemos que escribir en primer lugar la activación de la reescritura de URLs:
RewriteEngine on
A continuación se pueden añadir condiciones. La función de estas es filtrar los casos en los que se van a emplear las reglas y siguen el esquema “RewriteCond VARIABLE VALOR”. Yo no he empleado funciones para mi .htaccess, pero algunos ejemplos comentados serían:
RewriteCond %{HTTP_USER_AGENT} ^Mozilla.* //User-Agent de la peticion HTTP debe ser Mozilla, el usuario utiliza Firefox RewriteCond %{REMOTE_HOST} ^hostA.* //El nombre de la maquina que hace las peticiones contiene la cadena hostA
Existen muchas más variables a las que podemos acceder desde las condiciones, como son: HTTP_REFERER, HTTP_COOKIE, REMOTE_USER, REMOTE_PORT, etc.
Además es posible concatenar condiciones empleando [AND] o [OR] si se usa más de una.
Ahora toca hablar de las reglas, que son las que llevan a cabo las modificaciones sobre las URL. Todas siguen el esquema “RewriteRule URL_TUNING URL_FEA”. El parámetro URL_TUNING acepta patrones (como los que se usaban en seed). Ahora como ejemplo voy a usar las reglas que he utilizado yo para probar el sistema:
RewriteRule ^about about.php [L] RewriteRule ^([A-Za-z0-9_-]+)$ index.php?usuario=$1
En la primera de ellas la URL “http://dominio.com/about” es redirigida a la fea “http://dominio.com/about.php”. La L entre corchetes es un flag, las reglas pueden incluir uno o más separados por comas. En este caso la L significa “Last rule”, al aplicar esta regla deja de hacerlo con las siguientes, funciona como un break dentro de un switch.
La segunda regla incluye un patrón, que recorta la cadena que coincida con él y la guarda en $1, que después se le pasa al index.php como valor del nombre de usuario. El resultado nos permite que la url “http://dominio.com/Pepe” sustituya a “http://dominio.com/index.php?usuario=Pepe” (Twitter’s style).
Es posible del mismo modo definir un patrón que use más conjuntos entre paréntesis y recorte $1, $2, $3…
La página oficial del módulo, de donde he sacado la información, esta aquí.
Si os animáis a probarlo… comentario!

Hola, llevo tiempo buscando y no he podido lograr lo que quiero hacer en mi .htaccess, aquí explicaré mi problema para ver si me pueden ayudar.
Yo tengo esta regla:
RewriteRule ^iOS/(.*)_(.*)/in$ /panoramicas/panoramica.php?nombre=$1&tipo=$2 [L]
En la cual sucede lo siquiente:
Yo mando iOS/124_1/in y entonces se me ejecuta panoramica.php?nombre=124&tipo=1 y me muestra la URL de esta manera http://www.ejemplo.com/iOS/124_1/in
Eso está muy bien, pero yo quisiera saber si es posible que con RewriteCond yo puedo condicionar el segundo parámetro, porque siempre será o 1 ó 0 y en dependencia de eso mostrar:
http://www.ejemplo.com/iOS/124_EjemploUno/in ó
http://www.ejemplo.com/iOS/124_EjemploDos/in ó
O sea, que si viene un 1 en $2 yo puedo poner el “nombre” que yo quiera mostrar en la URL.
Espero haberme explicado,
Saludos y gracias.