<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews -Indexes
    </IfModule>

    RewriteEngine On

    # Handle Authorization Header
    RewriteCond %{HTTP:Authorization} .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

    # Redirect Trailing Slashes If Not A Folder...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} (.+)/$
    RewriteRule ^ %1 [L,R=301]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

# -------------------------------------------------------
# Gzip / Deflate Compression
# -------------------------------------------------------
<IfModule mod_deflate.c>
    AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript
    AddOutputFilterByType DEFLATE application/javascript application/x-javascript
    AddOutputFilterByType DEFLATE application/json application/xml application/xhtml+xml
    AddOutputFilterByType DEFLATE application/rss+xml application/atom+xml
    AddOutputFilterByType DEFLATE image/svg+xml font/ttf font/otf font/woff font/woff2
    AddOutputFilterByType DEFLATE application/font-woff application/font-woff2
    AddOutputFilterByType DEFLATE application/vnd.ms-fontobject

    # Remove browser bugs (for really old browsers)
    BrowserMatch ^Mozilla/4 gzip-only-text/html
    BrowserMatch ^Mozilla/4\.0[678] no-gzip
    BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
    Header append Vary User-Agent
</IfModule>

# -------------------------------------------------------
# Browser Caching (Cache-Control & Expires headers)
# -------------------------------------------------------
<IfModule mod_expires.c>
    ExpiresActive On

    # Images – 1 year
    ExpiresByType image/jpeg      "access plus 1 year"
    ExpiresByType image/jpg       "access plus 1 year"
    ExpiresByType image/png       "access plus 1 year"
    ExpiresByType image/gif       "access plus 1 year"
    ExpiresByType image/webp      "access plus 1 year"
    ExpiresByType image/svg+xml   "access plus 1 year"
    ExpiresByType image/x-icon    "access plus 1 year"
    ExpiresByType image/ico       "access plus 1 year"

    # Fonts – 1 year
    ExpiresByType font/ttf        "access plus 1 year"
    ExpiresByType font/otf        "access plus 1 year"
    ExpiresByType font/woff       "access plus 1 year"
    ExpiresByType font/woff2      "access plus 1 year"
    ExpiresByType application/font-woff  "access plus 1 year"
    ExpiresByType application/font-woff2 "access plus 1 year"
    ExpiresByType application/vnd.ms-fontobject "access plus 1 year"

    # CSS & JS – 1 month (use versioned filenames or query strings to bust cache)
    ExpiresByType text/css                "access plus 1 month"
    ExpiresByType text/javascript         "access plus 1 month"
    ExpiresByType application/javascript  "access plus 1 month"
    ExpiresByType application/x-javascript "access plus 1 month"

    # Documents & feeds – no cache
    ExpiresByType text/html           "access plus 0 seconds"
    ExpiresByType application/json    "access plus 0 seconds"
    ExpiresByType application/xml     "access plus 0 seconds"
    ExpiresByType text/xml            "access plus 0 seconds"
</IfModule>

<IfModule mod_headers.c>
    # Cache static assets
    <FilesMatch "\.(ico|jpg|jpeg|png|gif|webp|svg|woff|woff2|ttf|otf|eot)$">
        Header set Cache-Control "public, max-age=31536000, immutable"
    </FilesMatch>
    <FilesMatch "\.(css|js)$">
        Header set Cache-Control "public, max-age=2592000"
    </FilesMatch>

    # Security headers (improve security score too)
    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"
</IfModule>

# -------------------------------------------------------
# Keep Alive
# -------------------------------------------------------
<IfModule mod_headers.c>
    Header set Connection keep-alive
</IfModule>
