# ============================================================
# RACINE DE L'APPLICATION — filet de sécurité
#
# La racine web doit pointer sur public/. Si ce n'est pas le cas —
# hébergement mutualisé sans possibilité de la changer, erreur de
# configuration — ce fichier évite que config/, storage/ et les
# migrations soient accessibles par simple URL.
#
# Ce n'est pas une configuration correcte, seulement un garde-fou.
# ============================================================

<IfModule mod_rewrite.c>
    RewriteEngine On

    # Tout ce qui n'est pas dans public/ est renvoyé vers le front controller
    RewriteCond %{REQUEST_URI} !^/?public/
    RewriteRule ^(.*)$ public/$1 [L,QSA]
</IfModule>

# Dossiers qui ne doivent jamais être servis, même si la réécriture échoue
RedirectMatch 404 ^/?(config|core|app|storage|database|templates|install/.*\.(log|sql))(/|$)

# Fichiers sensibles par extension
<FilesMatch "\.(sql|log|md|json|lock|ini|yml|yaml|sh|bak|old|orig|dist)$">
    <IfModule mod_authz_core.c>
        Require all denied
    </IfModule>
    <IfModule !mod_authz_core.c>
        Order allow,deny
        Deny from all
    </IfModule>
</FilesMatch>

# Fichiers cachés (.env, .git, .htpasswd…)
<FilesMatch "^\.">
    <IfModule mod_authz_core.c>
        Require all denied
    </IfModule>
    <IfModule !mod_authz_core.c>
        Order allow,deny
        Deny from all
    </IfModule>
</FilesMatch>

Options -Indexes
