¿Qué es el archivo .htaccess?
El archivo .htaccess (HyperText Access) es un archivo de configuración que permite controlar el comportamiento del servidor Apache a nivel de directorio. A diferencia de las configuraciones del servidor que requieren acceso de administrador, el .htaccess puede ser editado por el propietario del sitio desde cPanel.
Con el .htaccess podés:
- Configurar redirecciones URL
- Proteger directorios con contraseña
- Bloquear acceso a IPs específicas
- Configurar URLs amigables (como las de WordPress)
- Activar la compresión GZIP
- Configurar caché del navegador
El .htaccess de WordPress
WordPress genera automáticamente su .htaccess básico. Este es el código estándar:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
Este código habilita las URLs amigables de WordPress (como /mi-articulo en lugar de /?p=123).
Redirecciones con .htaccess
Redirigir http a https (obligatorio)
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Redirigir www a sin www (o viceversa)
# www a sin www
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [R=301,L]
Redirección 301 de una URL específica
Redirect 301 /pagina-vieja https://www.tudominio.com/pagina-nueva
Seguridad con .htaccess
Proteger el wp-config.php
<Files wp-config.php> order allow,deny deny from all </Files>
Bloquear una IP específica
Deny from 192.168.1.100
Bloquear el acceso a archivos PHP en uploads
<Directory /wp-content/uploads> <Files *.php> deny from all </Files> </Directory>
Caché del navegador con .htaccess
<IfModule mod_expires.c> ExpiresActive On ExpiresByType image/jpg "access plus 1 year" ExpiresByType image/jpeg "access plus 1 year" ExpiresByType image/png "access plus 1 year" ExpiresByType image/webp "access plus 1 year" ExpiresByType text/css "access plus 1 month" ExpiresByType application/javascript "access plus 1 month" </IfModule>