# ─── Désactiver le listing des répertoires ──────────────────────────────────
Options -Indexes
# ─── Bloquer les fichiers sensibles ─────────────────────────────────────────
Order allow,deny
Deny from all
# ─── Bloquer l'accès direct aux fichiers cachés ──────────────────────────────
Order allow,deny
Deny from all
# ─── Cache long terme pour assets statiques (hachés par Vite) ───────────────
ExpiresActive On
# HTML → toujours revalider
ExpiresByType text/html "access plus 0 seconds"
# JS / CSS (noms hachés par Vite → 1 an)
ExpiresByType application/javascript "access plus 1 year"
ExpiresByType text/javascript "access plus 1 year"
ExpiresByType text/css "access plus 1 year"
# Images
ExpiresByType image/webp "access plus 1 year"
ExpiresByType image/png "access plus 1 year"
ExpiresByType image/jpeg "access plus 1 year"
ExpiresByType image/svg+xml "access plus 1 year"
ExpiresByType image/x-icon "access plus 1 year"
ExpiresByType image/vnd.microsoft.icon "access plus 1 year"
# Vidéo
ExpiresByType video/mp4 "access plus 1 year"
ExpiresByType video/webm "access plus 1 year"
# Polices
ExpiresByType font/woff2 "access plus 1 year"
ExpiresByType font/woff "access plus 1 year"
# JSON (données dynamiques → courte durée)
ExpiresByType application/json "access plus 1 hour"
# Assets immutables (Vite génère des noms hachés)
Header set Cache-Control "public, max-age=31536000, immutable"
# HTML → pas de cache
Header set Cache-Control "no-cache, no-store, must-revalidate"
Header set Pragma "no-cache"
# JSON → courte durée
Header set Cache-Control "public, max-age=3600, must-revalidate"
# Headers de sécurité
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"
# ─── Compression gzip ────────────────────────────────────────────────────────
AddOutputFilterByType DEFLATE text/html text/css application/javascript application/json
AddOutputFilterByType DEFLATE image/svg+xml font/woff2 font/woff
# ─── SPA routing (React / Vite) ──────────────────────────────────────────────
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.html [L]