• Home  / 
  • SEO
  •  /  Redirecciones 301 con .htaccess

Redirecciones 301 con .htaccess

redirecciones con .htaccess

En servidores apache, un fichero llamado “.htacess” le indica al demonio httpd las directivas que tiene que seguir en el directorio donde se encuentra el fichero. En este artículo voy a hablar muy por encima de una de las aplicaciones más prácticas del fichero .htaccess, las redirecciones 301 o redirecciones permanentes.


La redirección 301 más básica constaría de la siguiente sentencia:

redirect 301 /url-antigua/ http://www.nuevodominio.com/url-nueva/

La URL antigua se indica de forma relativa al archivo .htaccess (o al httpd.conf) y la nueva evidentemente se indica de forma absoluta empezando por con http://.


También tenemos la posibilidad de redireccionar en masa utilizando patrones y condiciones. Por ejemplo, podemos redirigir cualquier URL de un dominio a otro:

redirectMatch 301 ^(.*)$ http://www.javierlorente.es/

Eso redireccionaría cualquier URL como http://dominioantiguo.com/cualquier-cosa/ a la URL http://www.javierlorente.es/. En este caso, se concatenaría el /cualquier-cosa/.

Sin embargo, hay veces que no queremos concatenar nada. Imaginémonos que queremos redireccionar por ejmplo un conjunto de noticiasde 50.000 noticias, redirigimos unas 500 una a una, y el resto de noticias, las redirigimos a la sección padre, por la razón que sea, no viene al caso. Entonces tendríamos:

Redirect permanent /noticias/seccion/nombre-noticia-id.html dominio.com/seccion/subseccion/id.html
Redirect permanent /noticias/otra-seccion/keywords-noticia-id.html dominio.com/seccion/subseccion/id.html
RedirectMatch permanent /noticias/seccion/(.*)$ dominio.com/seccion/


También podemos redirigir una URL de un dominio a la misma URL en otro dominio:

redirectMatch 301 ^(.*)$ http://www.javierlorente.es/$1

Eso redireccionaría cualquier URL como http://dominioantiguo.com/cualquier-cosa/ a la URL http://www.javierlorente.es/cualquier-cosa/.


Si queremos optimizar un poco la carga de nuestro servidor y tenemos acceso al fichero httpd.conf (en VPS o servidores dedicados, por ejemplo), mi consejo es que le enchufemos estas directivas directamente al fichero httpd.conf y que le indiquemos que no busque los ficheros .htaccess recursivamente en cada directorio que lea, ahorraremos algunas milésimas de segundo.

Por último, lo anteriormente expuesto son las formas de redirecciones más básicas pero lo cierto es que el mod rewrite de Apache soporta reglas o condiciones por lo que podemos crear redirecciones dinámicas a traves de URLs iniciales. Tenéis más información sobre redirecciones complejas en estas dos urls:

Espero que os haya servido de ayuda 😉

Actualización: Gracias a Ani López he encontrado esta fantástica guía de introducción al URL Rewriting

Actualización 2: Para redirigir un dominio sin www a con www ponemos el siguiente código en el htaccess.

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

Para hacer lo contrario, para eliminar las www:

RewriteEngine On
RewriteCond %{HTTP_HOST} !^my-domain.com$ [NC] RewriteRule ^(.*)$ http://my-domain.com/$1 [R=301,L]

Actualización 3: Tip WPO

Cuando tenemos que redirigir muchas URLs, es preferible hacerlas por código en vez de incrustarlas a fuego en el fichero de configuración del servidor. Esto es así porque las redirecciones que se carguen en el fichero a fuego ocuparán memoria y harán que el resto de peticiones, las normales que ataquen URLs 200, se resientan. Un truco muy usado es paquetizar las redirecciones y servirlas por código, en ficheros de programación de servidor, php, perl, etc. De esta forma las líneas que se necesitan poner a fuego se reducen drásticamente y únicamente leeremos el hipotética fichero redirecciones.php en caso de que realmente se esté atacando una URL que el propio motor en producción no entienda. Incluso hay gente que va más allá, cargando las redirecciones en el propio error 404, para optimizar al máximo el tiempo de respuesta en peticiones válidas.

 

redireccion http a https

Para redirigir todo de http a https:

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Activar HSTS con .htaccess

Header add Strict-Transport-Security “max-age=31415926;

Incluso si quieres agregar el dominio al listado de preloading https://hstspreload.appspot.com/ deberías poner:

Header add Strict-Transport-Security “max-age=31415926; includeSubDomains; preload” env=HTTPS

Para activar HSTS en nginx:

add_header Strict-Transport-Security max-age=15768000;

Si después de trastear quieres volver atrás, quizá tengas que borrar la cache de tu navegador, en firefox: about:permissions y en chrome: chrome://net-internals/#hsts

Nada más incluirlo, si cumples todos los requisitos, obtendrás el mensaje:

Thank you! That domain has been queued for review. Review can take several weeks. You can check the status by entering the same domain again in the future. That domain name has already been accepted and is pending review. Note that review can take several weeks.

Y en cosa de 10 días (pese a que que pone several weeks) he vuelto a comprobar el mismo dominio y ya devuelve:

That domain name is already preloaded! If you don’t see it, note that changes follow the usual canary, dev, beta, stable progression and so can take several months to reach a stable release.

Lo que no me termina de quedar claro es si para poder activar HSTS necesitas un wilcard certificate si no tienes subdominios y sirves todo bajo el dominio principal o el certificado que tienes es para www pero solo tienes ese subdominio.

Actualización: mira tu lista de dominios bajo hsts en tu chrome local con: chrome://net-internals/#hsts

About the author

Javier Lorente Murillo

https://plus.google.com/+JavierLorente/posts

6 comments

Leave a comment:


A %d blogueros les gusta esto: