# ─── 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]