Skip to main content
Logo
Guía técnica: .htaccess, el Controlador
Resumen

Guía técnica: .htaccess, el Controlador

28 de diciembre de 2025
6 min de lectura

El archivo .htaccess (HyperText Access) es el centro de mando de los servidores Apache (y de los compatibles, como LiteSpeed). Si tu sitio corre en Nginx o en una plataforma como Vercel, no existe: las mismas reglas se escriben en otra configuración. Su comportamiento es jerárquico: una regla aquí afecta al directorio actual y a todas sus subcarpetas.

Este archivo no es solo configuración técnica; es el punto de cruce entre la Experiencia de Usuario (WPO) y la Preservación de Activos Digitales (SEO). Una configuración correcta aquí reduce el rebote, mejora la velocidad de carga (Core Web Vitals) y protege tu autoridad durante migraciones.

Advertencia (Precaución Extrema)

Un error de sintaxis (incluso un espacio mal puesto) en el .htaccess puede tirar abajo todo tu sitio web (Error 500). Haz siempre una copia de seguridad antes de editarlo.

Gestión de tráfico y autoridad (RewriteEngine)

El uso más crítico para el negocio. Aquí definimos cómo se transfieren los activos de autoridad (PageRank) y cómo se presentan las URLs.

Redirección 301 (El salvavidas de las migraciones)

Si cambias de dominio o reestructuras tu sitio, el 301 es obligatorio. Le dice a Google: “El negocio se mudó, transfiere toda la reputación antigua a esta nueva dirección”. Sin esto, pierdes años de posicionamiento en un día.

RewriteEngine On
# Redirigir todo el tráfico antiguo al nuevo dominio manteniendo la ruta
RewriteRule ^(.*)$ https://nuevodominio.cl/$1 [R=301,L]

URLs amigables (Conversión y Confianza)

Transforma parámetros técnicos sucios en rutas limpias que aumentan el CTR en buscadores.

  • Caso Simple: De proyectos.php a /proyectos.
RewriteRule ^proyectos/?$ proyectos.php [NC,L]
  • Caso E-commerce (Complejo): De index.php?cat=zapatos&id=nike a /tienda/zapatos/nike/.
RewriteRule ^tienda/([^/]*)/([^/]*)/$ /index.php?cat=$1&id=$2 [L]

Higiene Digital: WWW y HTTPS

La duplicidad diluye tu SEO. Debes forzar una sola versión de la verdad.

RewriteEngine On
# 1. Forzar HTTPS (Seguridad y Confianza)
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
# 2. Forzar sin-www (o con-www, tú eliges, pero sé consistente)
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]

Gestión de “Trailing Slash” (La barra final)

Google ve site.com/pagina y site.com/pagina/ como dos URLs distintas (Contenido Duplicado). Decide una estrategia y fuérzala. Aquí forzamos a quitar la barra (sin tocar los directorios reales, que la necesitan):

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

Aceleración de Ingresos (WPO)

La velocidad no es un lujo, es una métrica de retención: más espera, menos conversión. (Desconfía de la cifra exacta que circula por internet, “cada segundo cuesta un 7%”: viene de un estudio de 2008 y de otra web; la dirección es correcta, el número es tuyo de medir.)

Compresión Gzip (El .zip del servidor)

Comprime el código (HTML, CSS, JS) antes de enviarlo por el cable. En texto, reduce el peso típicamente a menos de la mitad. Si tu servidor lo soporta, Brotli comprime todavía mejor que Gzip.

<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript application/json
</IfModule>

Browser Caching (La mejor petición es la que no se hace)

Le dice al navegador del usuario: “Ya bajaste el logo y los estilos ayer, no los pidas de nuevo hasta el próximo mes”. Ahorra ancho de banda y carga instantánea para usuarios recurrentes.

<IfModule mod_expires.c>
ExpiresActive On
# Imágenes: Larga duración (1 año)
ExpiresByType image/jpeg "access plus 1 year"
ExpiresByType image/png "access plus 1 year"
ExpiresByType image/webp "access plus 1 year"
# CSS y JS: Media duración (1 mes)
ExpiresByType text/css "access plus 1 month"
ExpiresByType application/javascript "access plus 1 month"
</IfModule>

Un cuidado con el caché largo: si cambias tu CSS y el archivo se sigue llamando estilos.css, tus visitantes recurrentes seguirán viendo el diseño viejo durante un mes. La práctica correcta es que el nombre del archivo cambie con cada versión (estilos.a1b2c3.css), algo que la mayoría de las herramientas de construcción de sitios hace sola.

Keep-Alive (y por qué no se activa aquí)

Keep-Alive permite bajar múltiples archivos por una misma conexión, en lugar de abrir y cerrar una por cada imagen. Pero circula un “truco” que no funciona: poner Header set Connection keep-alive en el .htaccess. Eso solo agrega un encabezado; no activa nada. Keep-Alive se configura en el servidor (la directiva KeepAlive), y en los servidores modernos con HTTP/2 la reutilización de conexiones ya viene incluida. Si tu hosting no lo tiene activo, la conversación es con el proveedor, no con este archivo.

Seguridad y Control Corporativo

Headers de Seguridad (Modern Defense)

No dependas solo de plugins. Inyecta seguridad a nivel de servidor para proteger a tus usuarios.

<IfModule mod_headers.c>
# Evita que otros sitios incrusten tu web en un iframe (Clickjacking)
Header always set X-Frame-Options "SAMEORIGIN"
# Evita que el navegador "adivine" el tipo de un archivo
Header always set X-Content-Type-Options "nosniff"
# Controla cuánto de tu URL se comparte al salir hacia otro sitio
Header always set Referrer-Policy "strict-origin-when-cross-origin"
# Fuerza al navegador a usar HTTPS en el futuro (HSTS)
Header always set Strict-Transport-Security "max-age=31536000"
</IfModule>

Dos notas sobre lo que no está. X-XSS-Protection aparece en muchas guías, pero los navegadores modernos eliminaron esa protección y la recomendación actual es no usarlo. Y el includeSubDomains del HSTS, que también se copia mucho, obliga a usar HTTPS en todos tus subdominios durante un año: agrégalo solo cuando hayas verificado que todos lo tienen.

Evitar indexación quirúrgica (X-Robots-Tag)

A veces quieres que el PDF sea accesible si tienes el link, pero no quieres que aparezca en Google. El robots.txt es demasiado general; el .htaccess es un francotirador.

<Files ~ "\.(pdf|doc|docx)$">
Header set X-Robots-Tag "noindex, noarchive"
</Files>

Bloquear listado de directorios

Si un usuario entra a tusitio.com/imagenes/ y no hay un index.html, Apache por defecto lista todos tus archivos. Esto es un riesgo de seguridad masivo.

Options -Indexes

Hack: “Modo Mantenimiento VIP”

Cuando el sitio se cae o necesitas hacer un deploy crítico, poner una página de “En Construcción” suele matar el acceso a todos, incluidos los desarrolladores y el equipo de QA.

Este script redirige a todo el mundo a una página de mantenimiento (con código 503 para que Google sepa que es temporal y no desindexe), EXCEPTO a tu oficina o tu IP de casa.

RewriteEngine On
RewriteBase /
# IP de la Oficina (Desarrolladores) - ¡Cámbiala por la tuya!
RewriteCond %{REMOTE_ADDR} !^123\.45\.67\.89$
# IP de Casa (Líder del proyecto)
RewriteCond %{REMOTE_ADDR} !^98\.76\.54\.32$
# Si NO es ninguna de las IPs de arriba, y NO están pidiendo la imagen de mantenimiento
RewriteCond %{REQUEST_URI} !^/mantenimiento\.html$
RewriteCond %{REQUEST_URI} !^/logo-empresa\.png$
# Responder 503 (Service Unavailable) mostrando la página de mantenimiento
ErrorDocument 503 /mantenimiento.html
Header always set Retry-After "3600"
RewriteRule .* - [R=503,L]

Fíjate en las dos últimas líneas, porque es donde fallan las versiones que circulan: con un código que no es de redirección, Apache descarta el destino de la regla, así que RewriteRule ^(.*)$ /mantenimiento.html [R=503,L] devuelve un 503 genérico y nunca muestra tu página. La página se entrega con ErrorDocument, y Retry-After le dice a Google en cuánto tiempo volver.

El valor: Permites que el equipo técnico arregle el sitio en producción viendo los cambios en tiempo real, mientras el público y Google ven un aviso profesional de “Volvemos en breve”.