Redireccion 301 htaccess para evitar el 404

Las redirecciones 301 se usan tanto para la canonicalización del dominio, como para indicar que una página ha cambiado de nombre, ha sido eliminada o movida a otro directorio. Esta acción evita que salga el error 404 de página no encontrada que nos puede perjudicar en el SEO, y lo más importante, que además es muy frustrante para los usuarios.

Manipular el .htaccess

La redirección 301 se hace desde el .htaccess que es un archivo que se usa para configurar el servidor. Si no está, debes crearlo en la raíz de tu Sitio accediendo a ella por FTP.Editar el .htaccess es una acción bastante delicada por eso recomendamos que siempre se hagan copias de seguridad antes de empezar la edición, por si no nos funcionara poder volver al estado original inmediatamente.

Canonicalización de la url

Si lo que queremos es evitar el problema de tener dos versiones del mismo sitio web: midominio.com y www.midominio.com, lo que vamos a hacer es indicar que todo lo que está en midominio.com pertenece a www.midominio.com, asi el dominio siempre se mostrara con las www aunque el usuario entre sin escribirlas:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_HOST} ^midominio\.com[NC]
RewriteRule ^(.*)$ "https\:\/\/www\.midominio\.com\/$1" [R=301,L]
</IfModule>

O si preferimos hacerlo al contrario, de www.midominio.com a midominio.com:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.midominio\.com$ [NC]
RewriteRule ^(.*)$ "https:\/\/midominio.com\/$1" [R=301,L]     
</IfModule>

Redireccionar un directorio

Es practicamente el mismo código que se utiliza para redireccionar una página:

Redirect 301 /directoriooriginal/ http://www.midominio.com/directorionuevo/

Si queremos que se respete la estructura de url existente para el contenido:

RedirectMatch 301 ^/directoriooriginal/(.*)$ http://www.midominio.com/directorionuevo/$1

Redireccionar un subdirectorio

Redirect 301 /directorio/subdirooriginal/ http://www.midominio.com/directorio/subdirnuevo/

Si queremos que se respete la estructura de url existente para el contenido:

 RedirectMatch 301 ^/directorio/subdirorig/(.*)$ http://www.midominio.com/directorio/subdirnuevo/$1

Redireccionar un directorio a un dominio respetando la estructura de url existente

 RedirectMatch 301 ^/directorio/(.*)$ http://www.nuevodominio.com/$1

Redireccionar una web completa a otro dominio con todo el contenido

 RedirectMatch 301 ^/(.*)$ http://www.midominio.com/$1

Redireccionar un subdominio a midominio

   RewriteEngine On     
    RewriteCond %{HTTP_HOST} ^subdom\.midominio\.com$ [OR]     
    RewriteCond %{HTTP_HOST} ^www\.subdom\.midominio\.com$     
    RewriteRule ^/?$ "http\:\/\/www\.midominio\.com\/$1" [R=301,L]

Si te devuelve un error 500 de servidor es que necesitas incluir antes esta linea:
Options +FollowSymlinks por la configuración de tu servidor.
Quedaría pues:

Options +FollowSymlinks 
RewriteEngine On 
RewriteCond %{HTTP_HOST} ^subdom\.midominio\.com$ [OR] 
RewriteCond %{HTTP_HOST} ^www\.subdom\.midominio\.com$ 
RewriteRule ^/?$ "http\:\/\/www\.midominio\.com\/$1" [R=301,L]
5 (100%) 2 vote[s]