sara

Urls amigables con mod_rewrite

Escrito por: sara

Si te gusta lo que ves y te parece interesante, suscribete por email o por RSS. ¡Gracias por tu visita!.

¿No sabes qué es una url amigable? ¿Sabes lo qué es, pero no sabes cómo convertir tus urls en amigables? En este artículo explicaremos qué son, para qué sirven y cómo gestionarlas.

Las urls amigables son urls dinámicas que las arañas y los usuarios ven como estáticas. ¿Pero esto qué quiere decir exactamente? Con un ejemplo se entiende mucho mejor. Imaginemos que tenemos una catálogo online de productos de cosmética y nuestros productos se distinguen por un código.

  • Crema hidratante: código 6587
  • Crema protección solar: código 9875
  • Pintalabios: código 8547
  • ...

Normalmente los productos se almacenarán en una base de datos y cada producto se diferenciará de los demás por su código (identificador). En esta base de datos se almacenaran también las características de los productos como por ejemplo el precio, tipo de producto, tipo de piel, etc. Para mostrar los productos en la web, los programadores crearán una sola página para mostrar todos los productos, por ejemplo: ficha.php y dependiendo del código enviado como variable se mostrará un producto u otro. Es decir las urls tendrán el siguiente aspecto:

ficha.php?codigo=6587 -> en este caso se ha enviado la variable código 6587 y en la página ficha se mostrarán las características del producto crema hidratente.

ficha.php?codigo=9875 -> en este caso se ha enviado la variable código 9875 y en la página ficha se mostrarán las características del producto crema protección solar.

Aquí es cuando viene un seo y dice que esta url no le dice nada ni a las arañas de los buscadores ni al usuario que visita nuestra web ya que para nosotros el código 9875 nos deja totalmente indiferentes. Y además esto no es un enlace intuitivo ni fácil de recordar. ¿Entonces hay que reprogramar toda la web para que las urls contengan las palabras clave para cada producto? ¿o debemos crear una página estática para cada producto? Evidentemente no. Aquí es donde entra el famoso mod-rewrite. Mod_rewrite es una directiva unix de Apache que te permite reescribir la url y convertir urls del tipo pagina.php?variable=$var en nombre/producto.html por ejemplo. Más adelante veremos que a la hora de reescribir la url existen muchas posibilidades. Pero antes vamos a parar un momento, hemos visto Apache y .php... mmmmh. Está claro que esto sólo se puede hacer con servidores apache, así que si tienes la posibilidad de elegir el tipo de servidor es mejor que elijas un servidor Apache.

Bien, ahora que hemos entendido qué hay que hacer la pregunta es cómo. Muy sencillo editando el fichero .htaccess. .htaccess es un archivo de texto oculto que puede encontrarse en cada uno de los directorios públicos de los servidores web. Estos archivos contienen una serie de directivas para el servidor Apache que se aplicaran en el directorio donde se encuentra el fichero y en sus subdirectorios también, es decir cuando al servidor le llega una petición de una url, el servidor irá a buscar si en el fichero .htaccess existe alguna directiva para dicha página y si la encuentra la aplicará. Estas directivas las escribes tu mismo editando este fichero. Aquí es donde encontramos el segundo inconveniente, hay algunos proveedores de alojamiento web que no permiten editar los ficheros .htaccess libremente y que limitan las directivas que puedas añadir, así que si está en tu mano escoger el servidor no dudes en informarte sobre el acceso a estos ficheros ya que no sólo te servirán para las urls amigables sino que tienen múltiples utilidades muy interesantes.

Veamos un caso muy simple de una directiva en .htaccess, imagina que has movido una página de un directorio a otro y no quieres que cuando una persona vaya al directorio antiguo le salga un error 404 Page not found. Una posibilidad es redirigir a esa persona al nuevo directorio, esto es tan simple como escribir esto en el fichero .htaccess:

Redirect 301 /directorio-viejo/pagina.html http://www.tu-dominio.com/directorio-nuevo/pagina.html

¡Además le estas indicando a las arañas que esta página ha sido movida de manera permanente con el código 301! Podríamos extendernos en este ejemplo ya que es muy interesante y vemos múltiples utilidades, pero nos adentraremos directamente al tema en cuestión, la sintaxis de la directiva mod_rewrite:

<IfModule mod_rewrite.c> //indica el inicio de la directiva mod_rewrite
RewriteEngine On
//se activa la reescritura
RewriteRule url-solicitada url-destino [bandera] //se define la regla
</IfModule> //indica el fin de la directiva mod_rewrite

La dificultad aquí está en cómo se define la regla, para ello se usan las expresiones regulares y es quizás el punto más difícil de todo esto. A continuación la definición de Wikipedia de expresión regular:

"Una expresión regular, a menudo llamada también patrón, es una expresión que describe un conjunto de cadenas sin enumerar sus elementos. Por ejemplo, el grupo formado por las cadenas Handel, Händel y Haendel se describe mediante el patrón "H(a|ä|ae)ndel"."

Puedes encontrar diversos manuales/tutoriales y explicaciones sobre expresiones regulares por Internet. Nosotros te presentamos algunos de ellos:

Veamos un ejemplo, volvamos al caso del catálogo de productos de cosmética. Pongamos que deseamos que las urls que de la ficha de los productos tengan el siguiente aspecto:

nombre-del-producto-c-codigo.html

Es decir, el nombre del producto separado por guiones, un guión, la letra c, un guión, el código, un punto y "html". Cuando se enlace al producto la url deberá construirse de la siguiente manera:

<? echo "<a href=\"" . str_replace(" ","-","Nombre del producto") . "-c"- . $codigo-producto . ".html>Nombre del producto</a>"; ?>

Y entonces en el fichero .htaccess se indicará que este tipo de url se traducen como:

ficha.php?codigo=codigo

¿Y cómo se hace? pues así:

RewriteRule ^(.*)-c-([0-9]+)\.html$ ficha.php?codigo=$2

Le estas indicando que las urls que tengan el formato cualquier cosa "(.*)" posteriormente "-c-" y posteriormente un número con x dígitos ([0-9]+), sea traducida como ficha.php?codigo= y posteriormente la variable $2 que viene a referirse a la parte del patrón de un número con x dígitos ([0-9]+). Es importante incluir al final el signo del dolar $, para que se entienda que es el final de la cadena y no se devuelva la página en caso de que se introduzcan más carácteres al final de la URL.

Puedes profundizar más sobre la directiva mod_rewrite en la página oficial de apache.

Compartir este artículo:
  • del.icio.us
  • Google
  • Meneame
  • Technorati
  • BlogMemes Sp
Etiquetas: , , , , , ,

10 comentarios para el post “Urls amigables con mod_rewrite”

  1. Comentario de www.seoclon.com el 1 de Julio de 2008 a las 12:48

    Urls amigables con mod_rewrite...

    Artículo sobre qué son las urls amigables, sus ventajas y cómo gestionarlas....

  2. Comentario de DavidM el 1 de Julio de 2008 a las 16:16

    Excelente artículo. Utilizar URLs amigables afecta el posicionamiento, la usabilidad y otras variables del marketing en internet. ¿Te animas a hacer un experimento para comprobar que las URLs estáticas se posicionan mejor que las dinámicas?

  3. Comentario de viktorvaik el 1 de Octubre de 2008 a las 09:07

    Me gustaria que me ayudarais a crear unas lineas para mi htaccess de una pagina que tengo con el script de meneame y no puedo poner las url amigables. Gracias

  4. Comentario de sara el 1 de Octubre de 2008 a las 10:21

    ¡Hola viktorvaik! ¿Qué problema tienes exactamente? Mándanos las urls que quieres reescribir para poderte ayudar.

  5. Comentario de viktorvaik el 1 de Octubre de 2008 a las 10:29

    Pues mira, son las stories de http://recetas-decocina.es/ en las cuales si te metes en una noticia(receta) clicando en meneos me aparece la url con parametros, por ejemplo la primera: http://recetas-decocina.es/story.php?id=76 y me gustaria que saliese con url amigable, por ejemplo: http://recetas-decocina.es/story/tarta-de-ricota-al-limon. Espero que me podais hechar una mano que me estoy volviendo loco buscando por la red y no encuentro nada...Gracias de antemano

  6. Comentario de sara el 1 de Octubre de 2008 a las 15:48

    Una manera muy fácil que tienes de conseguir esto es siguiendo exactamente el ejemplo del artículo. Sin embargo deberás incluir la id dentro de la URL, es la forma más eficaz ;)

    En tu caso los enlaces internos debes colocar el siguiente código en PHP:

    <?php echo "<a href=\"http://recetas-decocina.es/story" . $id . "/" . str_replace(" ","-","Nombre de la receta") . ".html rel="nofollow">Nombre de la receta</a>"; ?>

    Con lo cual la URL de la receta de la tarta de ricota al limón sería:
    http://recetas-decocina.es/story76/tarta-de-ricota-al-limon.html

    Dentro del fichero .htaccess deberás poner la siguiente directiva:
    RewriteRule ^(.*)/story([0-9]+)/(.*)\.html$ story.php?id=$2

  7. Comentario de sara el 1 de Octubre de 2008 a las 16:11

    DavidM, creo que el artículo Estudio sobre la densidad y la relevancia de las palabras clave y la importancia de las zonas clave en el algoritmo de Google demuestra bastante que el hecho de tener una URL amigable supone una ventaja interesante para el posicionamiento de una página, ¿no crees? :)

  8. Comentario de viktorvaik el 1 de Octubre de 2008 a las 16:15

    Gracias Sara, pero no puedo tocar los enlaces internos ya que es un script y los genera, entonces no puedo meter el codigo php dentro de ningun sitio salvo en index,story...y no tengo ningun archivo de cada articulo...

  9. Comentario de DavidM el 1 de Octubre de 2008 a las 17:34

    Hola Victor.

    El código que te ha dado Sara es el código que necesitas. Reemplaza "Nombre de la receta" con la variable que contiene los títulos de los artículos.

  10. Comentario de URLs amigables el 18 de Noviembre de 2008 a las 02:24

    [...] URLs amigables con mod_rewrite [...]

Escribe un comentario

Entradas relacionadas:

No hay entradas relacionadas.


empresas de posicionamiento web | consultoria posicionamiento web | precio posicionamiento web | primeros puestos en buscadores | marketing tienda online | internet marketing online | servicios de posicionamiento web | empresas de alta en buscadores | administracion adwords | agencia de notas de prensa | campañas de email marketing | agencias de publicidad en internet | garantia de posicionamiento en buscadores | directorio | 0 | 1 | 2 | 3 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |