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.