Credit image

¿Te gusta el diseño web? ¡Echa un vistazo a la documentación de LenguajeCSS.com!

Pasar a minúsculas con ModRewrite

NOTA: Se puede necesitar cierto conocimiento del uso de la herramienta ModRewrite para comprender este artículo.

Hace relativamente poco tiempo, Google ha comenzado a dar más importancia a las URLs como contenido duplicado (o al menos, ha comenzado a hacerlo de forma pública, a través de webmaster tools) de modo que una URL es ahora sensitiva a mayúsculas y minúsculas.

Esto quiere decir, que a ojos de Google, las siguientes URL no son la misma (y por lo tanto, la considera contenido duplicado porque encuentra dos páginas diferentes con la misma META descripción):

http://www.pagina.com/articulos/articulo-numero-uno
http://www.pagina.com/articulos/Articulo-Numero-Uno

El «problema» es muy sencillo de solucionar por medio de -la siempre inestimable ayuda de- ModRewrite.

Los que no lo conozcan, ModRewrite es un módulo para el servidor web Apache, que se encarga de traducir, redireccionar y modificar direcciones URL para hacerlas más «amigables». Prácticamente, hoy en día, y sobretodo de cara al posicionamiento, es una herramienta indispensable.

Un ejemplo sencillo de esta herramienta sería la siguiente:

RewriteEngine on

RewriteCond %{HTTP_USER_AGENT} ^.*Googlebot.*$
RewriteRule ^/robots.txt$ /robots.php?ua=google [L]

Donde:

  • Con RewriteEngine activamos el motor de ModRewrite.
  • Con RewriteCond establecemos una precondición en la que se activará si el User-agent (identificación del navegador) contiene la palabra Googlebot (haciendo uso de expresiones regulares).
  • Si la precondición anterior se cumple, con RewriteRule haremos una redirección de modo que si se pide el archivo robots.txt, en realidad haremos la petición robots.php?ua=google.
  • Con [L] le decimos a ModRewrite que no realice más redirecciones.

Podemos ver, sin lugar a dudas, que con muy pocas lineas podemos conseguir resultados muy potentes. Generalmente se utilizan para conseguir que las direcciones visibles sean sencillas de recordar y evitar las incomodas direcciones con variables o también llamadas UGLY URLs.

Sin embargo, volviendo al objetivo del artículo, pasar a minúsculas o mayúsculas (funciones habitualmente llamadas lowercase o uppercase en programación) no es una tarea intuitiva en ModRewrite, pero si bastante sencilla, y con ella solucionariamos este problema.

Lowercase y Uppercase en Modrewrite


Necesitaremos utilizar la directiva RewriteMap de ModRewrite. Esta directiva no permite utilizarse en los tan útiles .htaccess, por lo que necesitaremos editar el fichero de configuración de nuestro apache (usualmente httpd.conf o apache2.conf).

Editamos este fichero, y al final de todo, escribimos lo siguiente:

RewriteMap lowercase int:tolower

Con ello estaremos creando una «función» llamada lowercase que realizará la operación interna tolower (pasar el texto a minúsculas). Existen 3 más: toupper (la inversa, pasar a mayúsculas), escape y unescape (codificación hexadecimal) que pueden ser bastante útiles para otras tareas.

Una vez hecho este cambio, guardamos la configuración y reiniciamos el servidor web: /etc/init.d/apache2 restart. Sólo queda configurar los ficheros .htaccess donde hacemos la traducción de URLs:

RewriteRule ^/([A-Za-z0-9-]+)$ http://www.pagina.com/articulos/$1 [L]

Este otro pequeño ejemplo utiliza una técnica llamada agrupación. Consiste en, mediante expresiones regulares, detectar que página se ha pedido y capturarla (en nuestro ejemplo cualquier cadena que contengan letras mayúsculas).

Dicha captura se realiza en la primera parte del RewriteRule (contenido entre paréntesis) y se guarda en la variable $1, de modo que si hubiese otro paréntesis posterior al primero, se guardaría en la variable $2.

Veamos ahora, el mismo ejemplo, aplicando la función que creamos antes:

RewriteRule ^/([A-Za-z0-9-]+)$ http://www.pagina.com/articulos/${lowercase:$1} [L]

La única variación consiste en que hemos utilizado lowercase para pasar a minúsculas la cadena capturada. Esto nos garantizará tener la misma dirección y evitar el contenido duplicado de URLs.

Escrito por Manz, el , en optimizacion web. Comentarios recibidos: 7.

7 comentarios de lectores
Angel
Angel
1

Hombre! este artículo me viene como anillo al dedo Manz, precisamente te iba a preguntar por esto! Ando en todo lo relacionado a robots.txt, urllist.txt, sitemaps, google and shit y pues ahuevo andaba en eso de getting rid of all the unnecessary crap! La última vez mencionaste algo al respecto relacionado con lo de Disallow de robots y me fue muy útil reescribir el htaccess.. ahora mi blog tiene UN solo nivel de profundidad, thx! Tienes algún ejemplo funcional para el caso este que mencionas? Osea ver de escribir en la barra de dirección 2 urls y obtener el resultado deseado....

InKiLiNo
InKiLiNo
2

Genial el artículo, en cuanto llegué a casa me pongo a hacerlo ;)

Pablo
Pablo
3

Excelente, voy a mirarlo bien en detalle lo del RewriteMap, ya que la semana pasada tuve que hacer una redireccion de espacios por guiones medios y lo termine haciendo desde php porque no encontre la forma de hacerlo desde el htaccess, me parece que por aca puede venir el asunto. Como siempre, muy util la entrada. Gracias!!!!

manelgarcia
manelgarcia
4

¿Y si no tenemos acceso al httpd.conf del servidor Apache, optamos a otras soluciones para este problema? Muchas gracias.

Manz
Manz
5

@manelgarcia: Las ventajas del ModRewrite es que se ejecutan en una capa anterior al lenguaje de servidor, por lo tanto no tiene que cargar los recursos necesarios para PHP, Perl o similares. En el caso de no tener acceso a httpd.conf o apache2.conf, la solución pasa a tener que utilizar sin remedio un lenguaje del lado del servidor, Header puede solucionar en cierta medida.

Ayora
Ayora
6

Muchas gracias por tu post, muy bien esplicado por lo que tenia un problema y creo poder sulucionarlo. Gracias

robert
robert
7

manz espero que me respondas, pero ando perdido, como accedo al httpd.config?? tengo un vps administrado pero no encuentro el archivo este!! Dime como accedo al httpd.config porfa Saludos

Publica tu opinión

Si lo deseas, puedes utilizar el siguiente formulario para publicar tu opinión o responder a alguna de las existentes:

Previsualización

Aquí se previsualizará su comentario. Revise que sea correcto antes de publicarlo.