Optimizando las URLs para la búsqueda
Utilizando el mod_rewrite
Con el mod_rewrite instalado y conociendo lo básico de expresiones regulares, lo único que nos queda es usar el .htaccess para indicarle como queremos que haga su trabajo.
Para nuestro ejemplo supondremos que tenemos un sistema el cual tiene varios artículos y cada artículo tiene varias páginas, por lo que en nuestra url estará compuesta de 2 variables, id y pagina que nos indican el artículo y el numero de página respectivamente.
Es decir:
artculo.php?id=XXX&pagina=YYY
Donde XXX e YYY son los valores de las variables que son pasadas por la URL mediante el método GET. Lo que buscamos es transformar nuestras direcciones de manera que nos sirva para la indexación, de esta manera:
articulo/XXX/YYY
En nuestro ejemplo lo que necesitamos hacer es simplemente traducir el valor del id y la página a la dirección real. Para esto, utilizaremos referencias previas. Veamos nuestro .htaccess para hacer esto
.htaccess
#Activamos el mod_rewrite
RewriteEngine on
#Le indicamos como re-escribir la URL
#En este caso lo que hacemos es indicarle que las expresiones entre paréntesis corresponden al id y página respectivamente.
RewriteRule /articulo/(.+)/(.+) /articulo.php?id=$1&pagina=$2
De esta manera, la url será re-escrita como a nosotros nos conviene, así de fácil.
Esta es una versión bastante básica, aunque funcional. Queda en el lector investigar más sobre el uso del mod_rewrite y así poder sacarle toda las funcionalidades que esta poderosa herramienta presenta.
Cabe resaltar que en este caso el .htaccess debe esta ubicado en un directorio superior al cual sé esta haciendo referencia con la url, dado que de otra manera no funciona. Es decir, si deseamos que nuestra url sea:
http://misitio.com/articulo/10/2
Nuestro .htaccess deberá encontrarse en un nivel superior al DOCUMENT_ROOT.

el enero 10th, 2006 a las 6:35 am
Me gustaría saber que diferencias de rendimiento habría entre los 3 métodos, si las hay, y en que deberíamos basarnos para elegir uno u otro.
Por otro lado felicitaros por el artículo, ya que me ha sido de gran ayuda.
Muchas gracias
Un saludo
el enero 25th, 2006 a las 10:49 am
Hola,
pensad que también podéis trabajar de una manera más cómoda si haceis uso de la variable PATH_INFO desde php.
En mi blog comento el uso de la misma:
http://jcasamitjana.blogspot.com/2006/01/indexar-pginas-dinmicas-en-buscadores.html
el febrero 14th, 2006 a las 12:58 pm
hola tengo una duda como seria si kisiera darle mod_rewriter a una url que contiene caracteres como
este-es-mi-titulo.html
me refiero a los – o a los _
el marzo 2nd, 2006 a las 8:52 am
Hola kiero hacer un generador de noticias rss totalmente automatico para una web, que coja las noticias de una base de datos o una pagina php, pero no tengo ni idea de como hacerlo, he encontrado cosas por internet, pero no se como juntarlas todas para conseguirlo. Una ayudita po favo, ke toy haciendo las practicas sin cobrar y encima sin saber nada de php
el marzo 9th, 2006 a las 6:53 pm
Muy buen artículo! Lo único que creo queda en el tintero es el tema de Rewrite en Windows. Por ejemplo, cómo hacemos para convertir a URLs “amigables” las generadas en el artículo “Creando Webs Modulares”.
Por ejemplo, yo tengo Apache + PHP + MySQL en Win XP y si bien el mod_rewrite está funcionando (lo he probado con una regla sencilla y tambien funciona con Textpattern), no he conseguido transformar una URL como http://dominio1/index.php?mod=home a algo “indexable”.
el marzo 11th, 2006 a las 3:17 pm
Quisiera saber si hay forma de VER la dirección real que el mod_rewrite está enmascarando… y como?
Gracias excelente este artículo… muy bueno.!
el mayo 5th, 2006 a las 6:39 pm
Este es muy buen articulo y funciona de maravilla.
Solo que ami no me funcion con el ejemplo original
RewriteEngine on
RewriteRule /articulo/(.+)/(.+) /articulo.php?id=$1&pagina=$2
tuve que hacerle un pequeno cambio
RewriteEngine on
RewriteRule articulo/(.+)/(.+) articulo.php?id=$1&pagina=$2
Saludos
Luis Villarino
http://www.lasvegaswh.com
el mayo 9th, 2006 a las 5:28 pm
Tremendo articulo amigo.-
el mayo 10th, 2006 a las 4:04 pm
hola, os paso esta página que me ha servido a mi para formar la expresion regular que se utiliza para el metodo del mod_rewrite
http://www.mod-rewrite-wizard.com/
Saludos
el junio 5th, 2006 a las 11:43 pm
Muy bueno, gracias. aca encontre otro articulo de gran utilidad,
http://www.baluart.net/articulo/403/urls-amigables-con-php.php
que aunque habla de urls amigables, no la tiene
Un saludo
el junio 7th, 2006 a las 10:23 am
Pero mariano, según la url del enlace si son amigables jeje.
Muy buenos ambos artículos, ma han servido de mucho.
Saludos.
el agosto 2nd, 2006 a las 4:45 pm
Alguien me puede orientar en como capturar el mismo error que se registra en el logfile ? (ademas de $php_errormsg)
Gracias
el agosto 10th, 2006 a las 12:18 pm
funciona Bien
el agosto 29th, 2006 a las 12:46 pm
Very Good, muy bueno
Thanks
Luis
http;//friendlycomputers.com
el octubre 15th, 2006 a las 9:45 am
Querias preguntarle si podian dar un ejemplo completo desde el index.php con este ejemplo pues no entendi como se hacia, es una pagina modular que quiero transformar a este tipo de url para el google, es un tipo index.php?modulo=noticias y quiero cambiarlo a index/noticias o sino index.php?modulo=noicias&id=2 y que quede index/noticias/2 dando un ejmplo ficticio como debo hacerlo para cambiar las urls¡?¿
gracias
el noviembre 14th, 2006 a las 10:11 am
Muy bueno el artículo, sólo quería dar mi granito de arena en la segunda de las propuestas. Qué te parece sustituir el if por algo del tipo;
if ($url[1] == ‘articulo’ and ( isset($url[2]) && !empty($url[2]) ) and ( isset($url[3]) && !empty($url[3] )))
es que si sólo ponias un parámetro tb se cargaba la página. Bueno, espero sus opiniones;
Javi
el enero 16th, 2007 a las 3:44 pm
Hola a todos, mas que un comentario quiero hacer una consulta ya que esta me atormenta ya hace una semana.
Segun el articulo uno puede hacer que el apache interprete por ejemplo http://www.dominio.com/noticias-43.htm por http://www.dominio.com/noticias.php?id=43.
Entonces si quisiera volver la url mas entendendible podria utilizar el titular en este caso de una noticia de la siguiente forma:
http://www.dominio.com/noticias-43-nombre-titular.htm
interpretando esto de forma real:
http://www.dominio.com/noticias.php?id=43&titular=nombretitular
Mi pregunta es que si en el .htacces puedo hacer que me interprete http://www.dominio.com/noticias-nombre-titular.htm
sin necesidad de mostrar el codigo de la noticia en la url cambiada.
Pero que si pase esta para poder realizar la consulta a la bd por el codigo.
Espero este clara mi pregunta.
Gracias
el enero 26th, 2007 a las 11:58 am
he probado el codigo php capturar.php pero no me funciona, lo que note que la funcion $url = explode(‘/’, $_uri); no esta funcionando ya que la variable $url[1] tiene toda la cadena articulo.php?id=XXX&pagina=YYY y las demas variables $url[2] y $url[3] no tienen ningun valor, que puede estar pasando?
el abril 26th, 2007 a las 8:50 am
Mi opinion es que actualmente los motores de búsqueda si que indexan URL’s tipo:
http://misitio.com/articulo.php?id=10&pagina=2
Antes no lo hacian pero no hay razón para que este URL no sea indexado ya que es un contenido valido.
Por supuesto es mejor que las URL’s no lleven muchas variables tipo GET en la dirección. Pero eso no significa que no sean indexados.
Si quieren corroborarlo hagan la siguiente búsqueda ( noticia.php/?id= ) en Google:
http://www.google.com/search?q=noticia.php%2F%3Fid%3D
el junio 18th, 2007 a las 6:44 pm
Tengo un problema como le hago para enexar un video a mi pagina web
el octubre 14th, 2007 a las 1:52 pm
[...] .htaccess. Mundo Geek – Software, linux, tecnología, gadgets e internet. — Sobre mod_rewrite: ZonaPHP » Optimizando las URLs para la búsqueda Aeoris.net – Reescribir direcciones con mod_rewrite de Apache MOD_REWRITE Ayuda para covertir paginas Web dinamicas en paginas estaticas. [...]
el octubre 30th, 2007 a las 6:14 pm
Como uso el mod_rewrite con webs modulares, me podrin ayudar por favor.
gracias
el julio 21st, 2008 a las 9:51 pm
Que porqueria, eres un monstruo viejo – De casualidad no eres colombiano?, era lo que andaba buscando… no podia estar satisfecho hasta lograr llegar al asunto. Es mucho mejor que pasar los datos por get. y Si el termino es “Muy profesional”. Me diste en el clavo, que nota y “me salvaste el cuello… por que dentro de poco debo entregar una aplicacion modular y no estaba conforme con el uso de GET”… Pero busque, Y apareciste, como un foco en medio de la oscuridad.
Le debo una invitacion a tomar politas frias.
Gracias, mi hermano… Un saludo especial desde Colombia!
el julio 30th, 2008 a las 5:09 am
[...] ZonaPHP, BaluArt, Unijimpe Read More Post a [...]
el septiembre 16th, 2008 a las 8:26 pm
Excelente artículo sí señor, pero me asalta una duda, ¿se puede emplear sin problemas en un servidor de pago?
Saludos
el octubre 31st, 2009 a las 8:27 am
Como uso el mod_rewrite con webs modulares, me podrin ayudar por favor.
gracias
el marzo 19th, 2010 a las 3:34 am
[...] Tener un solo punto de entrada en nuestro sitio web, implica el paso de varios parámetros a un solo archivo de nuestro sitio. Lo que hace que nuestras chances de ser indexados por un buscador tipo Google se vean reducidas. Pero para esto hay varias soluciones, y bien lo explica nuestro amigo Nok en Optimizando las URLs para las búsquedas. [...]
el abril 24th, 2010 a las 6:33 pm
Gracias por este articulo estuvo excelente y fue de gran ayuda.
Quisiera saber como hago par resolver este caso: Tengo una url conde algunos valores no son obligatorios que vayan en la url
http:mi.sitio.com/producto/3/nombre/
http:mi.sitio.com/producto/3/
si notan el nombre del producto no es obligatorio. se como hacerlo en la primera expresión en el archivo .htaccess pero no en el segundo
——-
Options FollowSymLinks
RewriteEngine On
RewriteRule ^producto/([0-9]+)/([a-z]+)?/?$ producto.php?id=$1&nombre=$2 [NC,L]
gracias por la ayuda que me puedan brindar.