# Dr. Agro — protección para Apache 2.4+
Options -Indexes
DirectoryIndex index.php

<IfModule mod_rewrite.c>
    RewriteEngine On

    # Directorios internos o no públicos.
    RewriteRule ^(?:core|storage|scripts|database|docs|config)(?:/|$) - [F,L,NC]

    # Herramientas antiguas que nunca deben ejecutarse desde la web.
    RewriteRule ^(?:install|reset_passwords)\.php$ - [F,L,NC]

    # Procesos heredados retirados hasta construir sus reemplazos CLI.
    RewriteRule ^modules/alertas/generar\.php$ - [F,L,NC]
    RewriteRule ^modules/compras/procesar_recurrentes\.php$ - [F,L,NC]

    # Acciones heredadas por GET quedan bloqueadas hasta reemplazarlas por POST + CSRF.
    RewriteRule ^modules/(?:productos|proveedores|clientes|compras|suscripciones|usuarios)/(?:eliminar|activar)\.php$ - [F,L,NC]
    RewriteRule ^modules/alertas/marcar_leida\.php$ - [F,L,NC]

    # Evitar acceso directo a parciales PHP internos de los módulos.
    RewriteRule ^modules/.*/_[^/]+\.php$ - [F,L,NC]

    # Bloquear archivos ocultos, excepto .well-known.
    RewriteRule "(^|/)\.(?!well-known(?:/|$))" - [F,L]
</IfModule>

# Bloquear métodos HTTP que la aplicación no utiliza.
<LimitExcept GET POST HEAD OPTIONS>
    Require all denied
</LimitExcept>

# Archivos sensibles o de respaldo.
<FilesMatch "(?i)(?:^\.|\.(?:bak|backup|sql|sqlite|md|log|ini|env|dist|zip|rar|7z|tar|gz|ps1|bat))$">
    Require all denied
</FilesMatch>

<FilesMatch "(?i)^(?:composer\.(?:json|lock)|phpunit\.xml|dr_agro_private\.php)$">
    Require all denied
</FilesMatch>

<IfModule mod_headers.c>
    Header always set X-Content-Type-Options "nosniff"
    Header always set X-Frame-Options "SAMEORIGIN"
    Header always set Referrer-Policy "strict-origin-when-cross-origin"
</IfModule>

# Compatibilidad con Apache 2.2.
<IfModule !mod_authz_core.c>
    <FilesMatch "(?i)(?:^\.|\.(?:bak|backup|sql|sqlite|md|log|ini|env|dist|zip|rar|7z|tar|gz|ps1|bat))$">
        Order allow,deny
        Deny from all
    </FilesMatch>
</IfModule>
