# =========================================================
# Angular + SSR - Core Web Vitals Optimization
# =========================================================

<IfModule mod_rewrite.c>
    RewriteEngine On

    # -----------------------------------------------------
    # HTTPS
    # -----------------------------------------------------
    RewriteCond %{HTTPS} !=on
    RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

    # -----------------------------------------------------
    # Angular routing
    # Don't rewrite existing files/folders
    # -----------------------------------------------------
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^ index.html [L]
</IfModule>


# =========================================================
# GZIP COMPRESSION
# =========================================================

<IfModule mod_deflate.c>

    AddOutputFilterByType DEFLATE text/plain
    AddOutputFilterByType DEFLATE text/html
    AddOutputFilterByType DEFLATE text/xml
    AddOutputFilterByType DEFLATE text/css
    AddOutputFilterByType DEFLATE text/javascript
    AddOutputFilterByType DEFLATE application/javascript
    AddOutputFilterByType DEFLATE application/x-javascript
    AddOutputFilterByType DEFLATE application/json
    AddOutputFilterByType DEFLATE application/xml
    AddOutputFilterByType DEFLATE application/xhtml+xml
    AddOutputFilterByType DEFLATE application/rss+xml
    AddOutputFilterByType DEFLATE image/svg+xml

</IfModule>


# =========================================================
# BROWSER CACHING
# =========================================================

<IfModule mod_expires.c>

    ExpiresActive On

    # HTML
    ExpiresByType text/html "access plus 0 seconds"

    # CSS / JS
    ExpiresByType text/css "access plus 1 year"
    ExpiresByType application/javascript "access plus 1 year"
    ExpiresByType text/javascript "access plus 1 year"

    # Images
    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/avif "access plus 1 year"
    ExpiresByType image/svg+xml "access plus 1 year"

    # Fonts
    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"

    # JSON/XML
    ExpiresByType application/json "access plus 1 hour"
    ExpiresByType application/xml "access plus 1 hour"

</IfModule>


# =========================================================
# CACHE CONTROL
# =========================================================

<IfModule mod_headers.c>

    # Angular hashed CSS/JS files
    <FilesMatch "\.(css|js)$">
        Header set Cache-Control "public, max-age=31536000, immutable"
    </FilesMatch>

    # Images
    <FilesMatch "\.(jpg|jpeg|png|gif|webp|avif|svg|ico)$">
        Header set Cache-Control "public, max-age=31536000"
    </FilesMatch>

    # Fonts
    <FilesMatch "\.(woff|woff2|ttf|otf)$">
        Header set Cache-Control "public, max-age=31536000, immutable"
    </FilesMatch>

    # HTML should not be cached for SSR
    <FilesMatch "\.(html)$">
        Header set Cache-Control "no-cache, no-store, must-revalidate"
        Header set Pragma "no-cache"
        Header set Expires "0"
    </FilesMatch>

</IfModule>


# =========================================================
# REMOVE ETag
# =========================================================

FileETag None


# =========================================================
# KEEP CONNECTION ALIVE
# =========================================================

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