# Flatboard 5 - Configuration Apache racine

# Activer le moteur de réécriture
<IfModule mod_rewrite.c>
    RewriteEngine On
    
    # Si quelqu'un essaie d'accéder à public/index.php, rediriger vers la racine
    RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+public/index\.php[\s?] [NC]
    RewriteRule ^public/index\.php$ / [R=301,L]
    
    # IMPORTANT: Forcer /uploads/attachments/ à passer par le routeur PHP
    # Même si le fichier existe, on veut gérer les permissions et MIME types via PHP
    # Cette règle DOIT être AVANT la règle générale pour avoir la priorité
    # Utiliser THE_REQUEST pour capturer la requête originale avant toute réécriture
    # THE_REQUEST contient "GET /uploads/attachments/... HTTP/1.1"
    RewriteCond %{THE_REQUEST} \s+/uploads/attachments/ [NC]
    RewriteRule ^uploads/attachments/(.*)$ public/index.php?url=/uploads/attachments/$1 [QSA,L]
    
    # Rediriger les requêtes API vers public/api.php (supporte les sous-dossiers)
    RewriteCond %{THE_REQUEST} \s+/api/ [NC]
    RewriteRule ^api/(.*)$ public/api.php?url=/api/$1 [QSA,L]
    
    # Rediriger vers public/ pour toutes les requêtes sauf fichiers existants
    # MAIS exclure /uploads/attachments/ qui doit toujours passer par index.php
    RewriteCond %{REQUEST_URI} !^/uploads/attachments/ [NC]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ public/$1 [L]
</IfModule>

# Protection des fichiers sensibles
# Bloquer l'accès direct aux fichiers .md, .json, .db, .log SAUF ceux dans /uploads/attachments/
<IfModule mod_rewrite.c>
    RewriteCond %{REQUEST_URI} !^/uploads/attachments/ [NC]
    RewriteRule \.(json|db|log|md)$ - [F,L]
</IfModule>

# Protection supplémentaire avec FilesMatch (mais ne bloque pas /uploads/attachments/ car déjà géré par RewriteRule ci-dessus)
<FilesMatch "\.(json|db|log)$">
    Require all denied
</FilesMatch>

# Protection des répertoires sensibles
RewriteRule ^(app|stockage|cli|tests)/ - [F,L]

# Les fichiers des plugins sont servis via PHP (route dans App.php)
# Pas besoin de règle spéciale ici, toutes les requêtes /plugins/ passeront par public/index.php

# Désactiver l'affichage des répertoires
Options -Indexes

# Cache long terme et compression des assets statiques
# Les noms de fichiers étant versionnés (?v=…) ou stables, on peut utiliser immutable
<IfModule mod_headers.c>
    # CSS, JS, polices, icônes : 1 an + immutable
    <FilesMatch "\.(css|js|woff|woff2|ttf|eot|otf|ico)$">
        Header set Cache-Control "public, max-age=31536000, immutable"
    </FilesMatch>

    # Images : 1 an + immutable
    <FilesMatch "\.(png|jpe?g|gif|svg|webp|avif)$">
        Header set Cache-Control "public, max-age=31536000, immutable"
    </FilesMatch>
</IfModule>

# Fallback Expires si mod_headers absent
<IfModule mod_expires.c>
    ExpiresActive On
    ExpiresByType text/css                  "access plus 1 year"
    ExpiresByType application/javascript    "access plus 1 year"
    ExpiresByType text/javascript           "access plus 1 year"
    ExpiresByType image/png                 "access plus 1 year"
    ExpiresByType image/jpeg                "access plus 1 year"
    ExpiresByType image/gif                 "access plus 1 year"
    ExpiresByType image/svg+xml             "access plus 1 year"
    ExpiresByType image/webp                "access plus 1 year"
    ExpiresByType image/avif                "access plus 1 year"
    ExpiresByType image/x-icon              "access plus 1 year"
    ExpiresByType font/woff2                "access plus 1 year"
    ExpiresByType font/woff                 "access plus 1 year"
    ExpiresByType application/font-woff2    "access plus 1 year"
</IfModule>
