# ================================================== # WhatsApp Bot Manager - HestiaCP Compatible .htaccess # Optimizado para hosting compartido y VPS con HestiaCP # ================================================== # Configuración básica de seguridad ServerSignature Off # Desactivar listado de directorios Options -Indexes # Activar RewriteEngine RewriteEngine On # ================================================== # PROTECCIÓN DE ARCHIVOS CRÍTICOS # ================================================== # Proteger archivos de configuración (compatible con HestiaCP) Require all denied # Proteger archivos sensibles Require ip 127.0.0.1 Require ip ::1 # Proteger archivos de instalación después de completada RewriteCond %{REQUEST_FILENAME} install.*\.php$ [NC] RewriteCond %{REMOTE_ADDR} !^127\.0\.0\.1$ RewriteCond %{REMOTE_ADDR} !^::1$ RewriteRule .* - [F,L] # Proteger archivos dot (ocultos) Require all denied # ================================================== # PROTECCIÓN DE DIRECTORIOS # ================================================== # Proteger directorio de logs RedirectMatch 403 ^/logs/.*$ # Proteger directorio de tests (si existe) RedirectMatch 403 ^/tests/.*$ # ================================================== # HEADERS DE SEGURIDAD (Compatible HestiaCP) # ================================================== # Prevenir clickjacking Header always set X-Frame-Options "SAMEORIGIN" # Prevenir XSS Header always set X-XSS-Protection "1; mode=block" # Prevenir MIME sniffing Header always set X-Content-Type-Options "nosniff" # Política de referrer Header always set Referrer-Policy "strict-origin-when-cross-origin" # Content Security Policy básica Header always set Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' cdn.jsdelivr.net cdnjs.cloudflare.com; style-src 'self' 'unsafe-inline' cdn.jsdelivr.net cdnjs.cloudflare.com; font-src 'self' cdnjs.cloudflare.com; img-src 'self' data:; connect-src 'self';" # Permissions Policy Header always set Permissions-Policy "camera=(), microphone=(), geolocation=(), payment=(), usb=(), autoplay=(), fullscreen=()" # ================================================== # OPTIMIZACIÓN DE RENDIMIENTO # ================================================== # Compresión GZIP (compatible HestiaCP) SetOutputFilter DEFLATE # Excluir archivos ya comprimidos SetEnv no-gzip # Cache estático (HestiaCP compatible) ExpiresActive On # Archivos CSS y JavaScript ExpiresDefault "access plus 1 month" # Imágenes ExpiresDefault "access plus 6 months" # Fuentes ExpiresDefault "access plus 1 year" # ================================================== # REGLAS DE REWRITE (HestiaCP) # ================================================== # Redirigir HTTP a HTTPS (descomentear en producción) # RewriteCond %{HTTPS} off # RewriteCond %{HTTP_HOST} !^localhost [NC] # RewriteCond %{HTTP_HOST} !^127\.0\.0\.1 [NC] # RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] # Redirigir www a no-www (opcional, descomentear si necesario) # RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC] # RewriteRule ^(.*)$ https://%1/$1 [R=301,L] # Página de inicio personalizada DirectoryIndex index.php index.html # ================================================== # PROTECCIÓN CONTRA ATAQUES COMUNES # ================================================== # Bloquear injection attempts # Bloquear SQL injection RewriteCond %{QUERY_STRING} (union|select|insert|delete|drop|create|update|or|and) [NC] RewriteRule .* - [F,L] # Bloquear XSS RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC] RewriteRule .* - [F,L] # Bloquear file injection RewriteCond %{QUERY_STRING} \.\.\/ [NC] RewriteRule .* - [F,L] # Bloquear acceso a wp-admin (si no es WordPress) RewriteCond %{REQUEST_URI} wp-admin [NC] RewriteRule .* - [F,L] # Limitar tamaño de subida (HestiaCP compatible) php_value upload_max_filesize 10M php_value post_max_size 10M php_value max_execution_time 300 php_value max_input_vars 3000 # Para PHP-FPM en HestiaCP FcgidMaxRequestLen 10485760 # ================================================== # CONFIGURACIÓN ESPECÍFICA DE APIs # ================================================== # Headers para APIs JSON Header always set Content-Type "application/json; charset=utf-8" Header always set Access-Control-Allow-Origin "*" Header always set Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS" Header always set Access-Control-Allow-Headers "Content-Type, Authorization, X-Requested-With" # Webhook específico para WhatsApp Header always set Access-Control-Allow-Origin "*" Header always set Access-Control-Allow-Methods "GET, POST" # ================================================== # CONFIGURACIÓN DE ERRORES PERSONALIZADA # ================================================== # Páginas de error personalizadas (opcional) # ErrorDocument 404 /404.html # ErrorDocument 500 /500.html # ErrorDocument 403 /403.html # Ocultar información del servidor ServerTokens Prod # Configuración de charset por defecto AddDefaultCharset UTF-8