¿Qué es .htaccess?
El archivo .htaccess
(hypertext access) es un archivo de
configuración usado por los servidores Apache, que permite regular algunos
comportamientos de un sitio web, sin tener que tocar los archivos de
configuración del servidor, ajustando cosas como redirecciones, seguridad,
URLs amigables o rendimiento.
Nota: El punto al inicio (.htaccess
) indica
que es un archivo oculto. Asegúrate de que tu editor o cliente FTP muestre
archivos ocultos para verlo.
¿Para qué sirve .htaccess?
Con .htaccess
, puedes hacer muchas cosas útiles para tu sitio
web.
- Redirecciones: Por ejemplo, redirigir todo el tráfico de HTTP a HTTPS para que tu sitio sea seguro.
-
URLs amigables: Convertir URLs largas y feas en cortas
y legibles (como
misitio.com/producto/123
en lugar demisitio.com/index.php?id=123
). - Seguridad: Bloquear el acceso a carpetas sensibles o proteger archivos.
- Optimización: Habilitar compresión de archivos o caché para que tu sitio cargue más rápido.
- Errores personalizados: Mostrar páginas de error (como 404) con tu propio diseño.
Ejemplos prácticos de .htaccess
A continuación, algunos ejemplos de uso común.
Importante: Antes de editar tu .htaccess
,
haz una copia de seguridad por si algo sale mal (aunque la mayoria de las
meteduras de pata se solucionan simplemente borrando la instrucción
incorrecta).
También asegúrate de que tu servidor Apache tenga habilitado el módulo
mod_rewrite
para las reglas de reescritura.
1. Redirigir de HTTP a HTTPS
Forzar que tu sitio use HTTPS (conexión segura):
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Explicación: Si alguien accede a http://misitio.com
, será redirigido a https://misitio.com
.
El R=301
indica una redirección permanente, buena para SEO.
2. Crear URLs amigables
Si tienes un sitio con URLs como misitio.com/index.php?page=contacto
, puedes hacer que se vean como misitio.com/contacto
.
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !‐f
RewriteCond %{REQUEST_FILENAME} !‐d
RewriteRule ^(.*)$ index.php?page=$1 [L]
Explicación: Esta regla redirige cualquier URL (que no sea un archivo o carpeta real) a index.php
, pasando el nombre
de la página como parámetro. Por ejemplo, misitio.com/contacto
se convierte en misitio.com/index.php?page=contacto
internamente.
3. Proteger una carpeta con contraseña
Si tienes una carpeta como /admin
, puedes protegerla para que solo accedan usuarios con contraseña.
<Directory /ruta/a/tu/carpeta/admin>
AuthType Basic
AuthName "Acceso Restringido"
AuthUserFile /ruta/a/.htpasswd
Require valid-user
</Directory>
Nota: Necesitas crear un archivo
.htpasswd
con las credenciales (puedes generarlo con
herramientas online o comandos como htpasswd
). Consulta con
tu hosting cómo configurar esto, ya que la ruta al
.htpasswd
puede variar.
4. Habilitar compresión para mejorar la velocidad
Comprimir archivos como CSS, JS o HTML reduce el tiempo de carga.
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/rss+xml
</IfModule>
explicación: Esto activa la compresión DEFLATE (que usa el algoritmo GZIP internamente) para archivos de texto, CSS y JavaScript. No comprime imágenes (como JPG o PNG) porque ya están comprimidas.
¿Cuánto mejora el rendimiento? La compresión DEFLATE puede reducir el tamaño de archivos de texto entre un 50% y 80%, lo que hace que las páginas carguen más rápido, a veces hasta un 15-30% menos de tiempo en sitios pequeños. Por ejemplo, un archivo CSS grande puede reducirse hasta un 83%, según pruebas reales. Sin embargo, comprimir archivos usa algo de CPU, asà que en sitios con mucho tráfico dinámico (como una tienda online grande), el servidor podrÃa trabajar más. Para sitios pequeños o personales, el impacto en CPU es mÃnimo y el beneficio en velocidad es notable.
5. Página de error 404 personalizada
Puedes mostrar una página personalizada cuando alguien intenta acceder a una URL que no existe.
ErrorDocument 404 /error-404.html
Explicación: Si alguien va a
misitio.com/pagina-inexistente
, será redirigido a
misitio.com/error-404.html
. Acuérdate de crear un archivo
error-404.html
!
Entendiendo las reglas de redirección
Las reglas de redirección en .htaccess usan el módulo mod_rewrite de Apache para manipular URLs.
Estas reglas usan expresiones regulares (regex) y banderas (como [L] o [R=301]), que son instrucciones
adicionales. Las expresiones regulares están basadas en el standard PCRE (perl) con alguna particularidad.
¿Qué son las expresiones regulares?
Las expresiones regulares son patrones que indican a mod_rewrite cómo debe verse una URL. Por ejemplo, ^(.*)$
significa "cualquier parte de una URL salvo el dominio".
Si ya conoces algún lenguaje de programación (JavaScript. PHP o Python),
te será familiar.
¿Qué son las banderas?
Las banderas son códigos entre corchetes (como [L, R=301]) que le dicen a Apache cómo aplicar la regla. Las más comunes son:
- L (Last): Detiene el procesamiento de más reglas, si se cumple la actual.
- R=301 o R=302: Indica una redirección permanente (301) o temporal (302).
- NC (No Case): Ignora mayúsculas/minúsculas (por ejemplo, Contacto y contacto son lo mismo).
- QSA (Query String Append): Conserva parámetros de la URL original (como ?id=123).
- NE (No Escape): Evita codificar caracteres especiales (como #).
Desglose del ejemplo de redirección de HTTP a HTTPS
En el ejemplo anterior de redirección de http a https, la lÃnea htaccess se interpreta como sigue:
RewriteEngine On
: Activa el motor de reescritura (mod_rewrite).RewriteCond %{HTTPS} off
: Comprueba si la conexión no es segura (HTTP en lugar de HTTPS).RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
: Redirige a la misma URL pero con HTTPS, usando las variables de Apache para el dominio y la ruta.^(.*)$
: Captura toda la URL (cualquier carácter desde el inicio hasta el final).https://%{HTTP_HOST}%{REQUEST_URI}
: Redirige a la misma URL, pero con https://.- %1 no se usa aquà porque no hay grupos en la condición, pero
%{HTTP_HOST}
(dominio, como misitio.com) y%{REQUEST_URI}
(ruta, como pagina) son variables de Apache. [L,R=301]
: Aplica una redirección permanente (R=301) y detiene el procesamiento de más reglas (L).
En resumen, esta regla redirige cualquier solicitud HTTP a su equivalente HTTPS, manteniendo la misma ruta y dominio.
Desglose del ejemplo de URLs amigables
En el ejemplo para crear urls amigables:
RewriteEngine On
Activa el motor de reescritura.-
RewriteCond %{REQUEST_FILENAME} !-f
Esta condición verifica que el archivo solicitado (REQUESTFILENAME) _no existe fÃsicamente (!-f
significa "no es un archivo"). Si el archivo sà existe, la regla de reescritura se omite. -
RewriteCond %{REQUEST_FILENAME} !-d
Como el anterior, comprueba si no es un directorio (!-d
). De nuevo, si es un directorio, se omite. -
RewriteRule ^(.*)$ index.php?page=$1 [L]
Si se cumplen las dos condiciones anteriores, cualquier petición que llegue (por ejemplo,misitio.com/ayuda
) será capturada($1
) y redirigida aindex.php?page=ayuda
. El patrón^(.*)$
captura la parte de la URL después del dominio, no el dominio en sÃ, y la pasa como valor del parámetropage
. La bandera[L]
significa "last": indica que esta es la última regla que se debe aplicar si coincide.
Consejos para trabajar con .htaccess
-
Haz copias de seguridad: Un error en
.htaccess
puede hacer que tu sitio deje de funcionar (error 500). Siempre guarda una copia antes de editar. -
Prueba con cuidado: Usa un editor de texto plano para
crear o modificar el archivo. Asegúrate de que el archivo tenga el
nombre exacto
.htaccess
y permisos correctos (generalmente 644). Después de hacer cambios, verifica que tu sitio siga funcionando. Si algo falla, revisa los logs de error de Apache (puedes pedirlos a tu hosting). -
Compatibilidad: No todos los hostings permiten todas
las reglas de
.htaccess
. Consulta con tu proveedor si necesitas activar módulos comomod_rewrite
. - Aprende más: .htaccess es un archivo pequeño y muy poderoso, pero una instrucciones en un formato arcano, por no decir arcaico. Online encontrarás mas información y seguramente soluciones para tu problema concreto.
Conclusión
Con las reglas adecuadas, puedes mejorar la seguridad, la velocidad y la experiencia de usuario de tu sitio. Sin embargo dominar todas sus posibilidades requiere su estudio.