Un redireccionamiento 301 permanente en el archivo .htaccess permite dirigir a la dirección correcta tanto a motores de búsqueda como a visitantes de un sitio web, y es el método recomendado para dirigir el tráfico cuando por algún motivo se ha cambiado la URL de una serie de páginas.
Estos son los usos más comunes de un redireccionamiento .htaccess 301:
Redireccionar archivos individuales:
Si necesitamos redirigir unos pocos archivos o páginas, digamos desde ejemplo.com/viejo.htm hacia nuevo.htm se puede usar un redirect 301 como este:
Redirect 301 /viejo.htm /nuevo.htm
También se puede redireccionar hacia un archivo en otro dominio, como ser desde ejemplo.com/viejo.htm hacia ejemplo.net/nuevo.htm:
Redirect 301 /viejo.htm https://ejemplo.net/nuevo.htm
Redireccionar viejo dominio a nuevo dominio:
Si necesitamos cambiar el dominio de un sitio web, podemos redirigir todas las visitas también. Si por ejemplo tenemos que redirigir las visitas a ejemplo.com hacia ejemplo.org se puede usar este fragmento:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^ejemplo.com [NC,OR]
RewriteCond %{HTTP_HOST} ^www.ejemplo.com [NC]
RewriteRule ^(.*)$ https://ejemplo.org/$1 [L,R=301,NC]
Forzar el uso de SSL (HTTPS) en un dominio:
El .htaccess también nos permite forzar el uso de HTTPS en un a web que no lo venga usando. Esto es especialmente útil en sitios HTML o PHP que no usen un CMS donde podamos forzar el uso de SSL programáticamente:
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Evitar el uso de SSL en un dominio (forzar HTTP):
Por otrro lado, también podemos tener algún caso en que por extraño que parezca, necesitemos forzar el uso de HTTP en lugar del HTTPS:
RewriteEngine on
RewriteCond %{HTTPS} on
RewriteRule ^ http://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Forzar el uso de www. en un dominio:
Si queremos que el sitio web use www en todas sus URLs, podemos usar esto:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^ejemplo.com [NC]
RewriteRule ^(.*)$ https://www.ejemplo.com/$1 [L,R=301,NC]
Eliminar el www. de un dominio:
En otros casos podemos querer que las URLs de un sitio web no usen nunca www. Para eso tenemos este código:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1%{REQUEST_URI} [R=301,QSA,NC,L]
Redireccionar los archivos con cierta extensión:
Si por ejemplo cambiamos el formato de una serie de archivos, por ejemplo si hemos convertido los .bmp a .png, podemos usar este código:
RewriteEngine On
RewriteCond %{REQUEST_URI} .bmp$
RewriteRule ^(.*).bmp$ /$1.png [R=301,L]