¿Como utilizar el htaccess para redireccionar?

Lectura de 4 minutos
¿Como utilizar el htaccess para redireccionar?

El archivo .htaccess (Hypertext Access) es una herramienta fundamental en servidores Apache. Se utiliza principalmente para aplicar configuraciones a nivel de directorio sin necesidad de editar el archivo de configuración principal del servidor.

Gracias al .htaccess, podemos reescribir URLs complejas en formatos amigables (esenciales para el SEO), bloquear direcciones IP o bots maliciosos, gestionar los errores del servidor (como el famoso error 404) y, lo más importante, controlar el flujo de usuarios mediante redirecciones.

Consideraciones Previas y Buenas Prácticas

Nombre y formato: El archivo no tiene extensión; su nombre exacto debe ser .htaccess (con el punto inicial). Debes guardarlo en formato ASCII (no binario). Si usas el Bloc de Notas de Windows, guárdalo entre comillas (".htaccess") para evitar que se le agregue automáticamente la extensión .txt.

Permisos: El archivo debe tener permisos de lectura-escritura-ejecución (CHMOD) 644. Con esto hacemos que el archivo pueda ser usado por el servidor, pero se previene que sea accedido a través del navegador.

Activación en el servidor: Para que el .htaccess funcione, la directiva AllowOverride debe estar configurada en "All" dentro del archivo principal de configuración de Apache (httpd.conf).

Ubicación: Por lo general, siempre estará ubicado en el directorio raíz de nuestros sitios web, aunque también puede estar ubicado en subdirectorios específicos si necesitas aplicar reglas aisladas.

Tipos de Redirecciones: mod_alias vs mod_rewrite

mod_alias: Usa directivas simples como Redirect y RedirectMatch. Es ideal para redirecciones básicas (de la URL A a la URL B).

mod_rewrite: Usa directivas como RewriteEngine, RewriteCond y RewriteRule. Es mucho más potente y permite usar expresiones regulares complejas, verificar condiciones y evaluar variables del servidor.

Guía práctica de redirecciones con .htaccess

Redireccionar una página específica a otra (Ideal para SEO)

Importante para cuando estamos haciendo SEO en nuestra página web y cambiamos el nombre de un slug o babosa. Se debe redireccionar la URL antigua hacia la nueva para no perder el posicionamiento.

Redirect 301 /pagina-vieja.html http://www.tu-dominio.com/pagina-nueva.html

Redireccionar directorio antiguo de un dominio a otro directorio nuevo

Transfiere todo el contenido de una carpeta vieja a una nueva.

Redirect 301 /viejo-directorio/ http://www.tu-dominio.com/nuevo-directorio/

Redireccionar directorio completo que vas a eliminar a otra página

Si borraste una categoría entera y quieres que ese tráfico vaya al inicio o a una landing, sin generar errores 404.

RedirectMatch 301 ^/viejo-directorio/(.*)$ http://www.tu-dominio.com/nueva-pagina

Redireccionar de un dominio a otro

Transfiere todo el tráfico y la fuerza de un dominio viejo hacia un dominio nuevo.

Redirect 301 / http://www.dominionuevo.com/

Redireccionar todo el contenido de un dominio a la página inicial de otro

Si alguien entra a cualquier página del dominio viejo, será redirigido siempre a la portada del nuevo dominio.

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

Redireccionar página web completa manteniendo la estructura en otra URL

Si alguien escribe cualquier cosa después del dominio, lo redireccionará a la nueva URL principal manteniendo la ruta (por ejemplo: viejo.com/contacto irá a nuevo.com/contacto).

RewriteEngine On RewriteCond %{HTTP_HOST} ^tu-dominio.com$ [OR] RewriteCond %{HTTP_HOST} ^www.tu-dominio.com$ RewriteRule ^(.*)$ http://www.nuevodominio.com/$1 [R=301,L]

Redireccionar de sin WWW a WWW

Unifica tu dominio para evitar problemas de contenido duplicado de cara a Google.

Options +FollowSymlinks RewriteEngine On RewriteCond %{HTTP_HOST} ^tu-dominio.com [NC] RewriteRule ^(.*)$ http://www.tu-dominio.com/$1 [R=301,L]

Redireccionar de WWW a sin WWW

La opción inversa, ideal si prefieres tener URLs más limpias y cortas.

Options +FollowSymlinks RewriteEngine On RewriteCond %{HTTP_HOST} ^www.tu-dominio.com [NC] RewriteRule ^(.*)$ http://tu-dominio.com/$1 [R=301,L]

Redireccionar página web completa de HTTP a HTTPS (Forzar SSL)

Garantiza que toda la navegación de tu sitio web se realice de forma segura y cifrada bajo el protocolo HTTPS (código corregido y optimizado).

RewriteEngine On RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Ocultar o quitar la extensión .html o .php de la URL

Permite que el usuario visite tu-dominio.com/contacto en lugar de tu-dominio.com/contacto.php.

RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^([^\.]+)$ $1.php [NC,L]

Añadir una barra final (Trailing Slash) a las URLs

Ayuda a la consistencia del SEO. Redirige automáticamente tu-dominio.com/pagina a tu-dominio.com/pagina/.

RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*[^/])$ /$1/ [L,R=301]

Redireccionar una URL con parámetros (Query Strings)

Redirige URLs dinámicas como pagina.php?id=123. Se debe evaluar el Query String y añadir un ? al final de la regla para no arrastrar parámetros.

RewriteEngine On RewriteCond %{QUERY_STRING} ^id=123$ RewriteRule ^pagina\.php$ /nueva-pagina-limpia? [R=301,L]

Redirigir a los visitantes a una página de mantenimiento (Excepto tu IP)

Ideal para cuando estás trabajando en el sitio pero no quieres cerrarlo abruptamente para el público. Reemplaza 123.456.789.000 con tu dirección IP real.

RewriteEngine On RewriteCond %{REMOTE_ADDR} !^123\.456\.789\.000 RewriteCond %{REQUEST_URI} !/mantenimiento.html$ [NC] RewriteRule ^(.*)$ /mantenimiento.html [R=302,L]