Options -Indexes
Options +FollowSymLinks
RewriteEngine On

# Force HTTPS
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

# React Router SPA fallback — REQUIRED
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ /index.html [L]

# Gzip
<IfModule mod_deflate.c>
  AddOutputFilterByType DEFLATE text/html text/plain text/css
  AddOutputFilterByType DEFLATE application/javascript application/x-javascript
  AddOutputFilterByType DEFLATE application/json image/svg+xml
  AddOutputFilterByType DEFLATE font/woff2 font/woff font/ttf
</IfModule>

# Browser Caching
<IfModule mod_expires.c>
  ExpiresActive On
  ExpiresByType text/html                  "access plus 0 seconds"
  ExpiresByType text/css                   "access plus 1 year"
  ExpiresByType application/javascript     "access plus 1 year"
  ExpiresByType image/jpeg                 "access plus 6 months"
  ExpiresByType image/png                  "access plus 6 months"
  ExpiresByType image/webp                 "access plus 6 months"
  ExpiresByType font/woff2                 "access plus 1 year"
</IfModule>

# Cache-Control headers
<IfModule mod_headers.c>
  Header always set X-Frame-Options "SAMEORIGIN"
  Header always set X-Content-Type-Options "nosniff"
  Header always set X-XSS-Protection "1; mode=block"
  Header always set Referrer-Policy "strict-origin-when-cross-origin"
  <FilesMatch "\.(js|css|woff2|woff|jpeg|jpg|png|webp)$">
    Header set Cache-Control "public, max-age=31536000, immutable"
  </FilesMatch>
  <FilesMatch "\.html$">
    Header set Cache-Control "no-cache, no-store, must-revalidate"
  </FilesMatch>
</IfModule>

AddDefaultCharset UTF-8
