- Detalles
- Por Juan Padial
- En Web y Servidores
- Visto: 2328
Me he encontrado en la situación de que el CMS que utilizo en mi web no acepta las versiones con mayúsculas de las URL dando error 404 (no encontrado), a diferencia de lo que parecen utilizar aquí en bloogie que sí que acepta mayúsculas en sus url para un mismo contenido. Por ejemplo, la url "http://miweb.com/articulo.html" es correcta en mi web, pero no "http://miweb.com/Articulo.html". Para mí esto es lógico que pase cuándo se solicitan archivos que existen físicamente en el servidor pero pensaba que los sistemas eran más flexibles cuándo se trata de url reescritas. Me he puesto a investigar y, estaba en lo cierto, una web puede y debe ser flexible en cuánto a las mayúsculas en sus url pero con algunos matices desde un punto de vista SEO. Si una url puede aceptar mayúsculas y minúsculas, lo mejor es que no seas sensible a mayúsculas, veamos algunas razones que daban expertos en posicionamiento.
En el blog de SEOMoz encontré una entrada sobre las mejores practicas para construir url, y entre ellas recomendaban no ser sensible a mayúsculas en las URL. Venían a decir que para evitar confusión en los usuarios era mejor no ser sensible a mayúsculas en las URL y que lo mejor es utilizar siempre la versión de URL en minúsculas haciendo una redirección 301 de las URL con mayúsculas a su correspondiente versión en minúsculas, especialmente si se recibe una buena cantidad de tráfico directo (usuarios que escriben la dirección en su navegador)
Para no ser sensible a mayúsculas pero evitar a la vez el contenido duplicado en nuestra web, como se mencionó antes, una solución sería hacer una redirección 301 (movido permanentemente) de las url con mayúsculas a su versión en minúsculas. Esta redirección se puede hacer con un script php, por ejemplo, pero creo que es mucho más fácil realizarlo con el módulo mod_rewrite de Apache. Estas serían las directivas a poner en nuestro archivo .htaccess para convertir y redireccionar una url con mayúsculas a su versión en minúsculas:
RewriteEngine On
RewriteMap lc int:tolower
RewriteCond %{REQUEST_URI} [A-Z]
RewriteRule (.*) ${lc:$1} [R=301,L]
Ahora, todas las solicitudes que contengan alguna mayúscula serán redireccionadas a su versión en minúsculas. Por ejemplo, "http://dominio.com/Index.php" sería redireccionado a "http://dominio.com/index.php".
El código anterior puede no funcionar en todas los servidores y configuraciones. Entre las posibles causas, según leí en esta entrada de ServerFault, es que se necesita tener activado mod_spelling de apache. Puedes comprobar si tienes mod_spelling instalado y activarlo con este código (deberás colocarlo antes que el código para transformar las url mayúsculas a su versión en minúscula):
<IfModule mod_speling.c> CheckSpelling on </IfModule>
Si no tenéis acceso a mod_spelling podéis probar esta otra opción, aunque a mi personalmente no me gusta (obtenido de http://www.webmasterworld.com/forum92/958.htm):
Options +FollowSymLinks RewriteEngine on # If the URI does not contain any uppercase letters, skip the next 28 rules. RewriteRule ![A-Z] - [S=28] # # Else convert the first instance of "A" to "a", "B" to "b", etc. RewriteRule ([^A]*)A(.*) $1a$2 RewriteRule ([^B]*)B(.*) $1b$2 # <22 more rules for each letter> RewriteRule ([^Y]*)Y(.*) $1y$2 RewriteRule ([^Z]*)Z(.*) $1z$2 # # If any more uppercase characters remain, restart mod_rewrite from the top RewriteRule [A-Z] - [PT,N] # Otherwise do an external 301 redirect to give the client the new URL. RewriteRule (.*) http://www.example.com/$1 [R=301,L] # # Skip to here if no uppercase letters in client-requested URL. # <some other rules>
Creado el 22 02 2012 Actualizado el 30 05 2012
