# H2 push if no cookies (first visit)
# don't forget to replace steroids by your theme's name & assets versions if modified
# rationale is to push main.esm.min.js because older browsers don't support H2 anyways
<Files *.html.br>
    Header add Link "</wp-content/themes/steroids/styles/main.min.css>;rel=preload" "expr=-z %{req:Cookie}"
    Header add Link "</wp-content/themes/steroids/js/main.esm.min.js>;rel=preload" "expr=-z %{req:Cookie}"
</Files>

<Files *.html.gz>
    Header add Link "</wp-content/themes/steroids/styles/main.min.css>;rel=preload" "expr=-z %{req:Cookie}"
    Header add Link "</wp-content/themes/steroids/js/main.esm.min.js>;rel=preload" "expr=-z %{req:Cookie}"
</Files>

<Files *.html>
    Header add Link "</wp-content/themes/steroids/styles/main.min.css>;rel=preload" "expr=-z %{req:Cookie}"
    Header add Link "</wp-content/themes/steroids/js/main.esm.min.js>;rel=preload" "expr=-z %{req:Cookie}"
</Files>

# Specify Brotli-encoded assets
<Files *.js.br>
    AddType "application/javascript" .br
    AddEncoding br .br
</Files>
<Files *.css.br>
    AddType "text/css" .br
    AddEncoding br .br
</Files>
<Files *.svg.br>
    AddType "image/svg+xml" .br
    AddEncoding br .br
</Files>
<Files *.html.br>
    AddType "text/html" .br
    AddEncoding br .br
</Files>

# Specify gzip-encoded assets
<Files *.js.gz>
    AddType "application/javascript" .gz
    AddEncoding gzip .gz
</Files>
<Files *.css.gz>
    AddType "text/css" .gz
    AddEncoding gzip .gz
</Files>
<Files *.svg.gz>
    AddType "image/svg+xml" .gz
    AddEncoding gzip .gz
</Files>
<Files *.html.gz>
    AddType "text/html" .gz
    AddEncoding gzip .gz
</Files>

# Block XML-RPC requests (deactivate if needed)
<Files xmlrpc.php>
    Require all denied
</Files>

# Set proper font files mime type
AddType font/woff woff
AddType font/woff2 woff2

# Define sane defaults for cache
ExpiresActive On
ExpiresByType text/html "access plus 1 hour"
ExpiresByType image/jpg "access plus 1 year"
ExpiresByType image/jpeg "access plus 1 year"
ExpiresByType image/gif "access plus 1 year"
ExpiresByType image/png "access plus 1 year"
ExpiresByType image/svg+xml "access plus 1 year"
ExpiresByType text/css "access plus 1 year"
ExpiresByType text/x-javascript "access plus 1 year"
ExpiresByType image/x-icon "access plus 1 year"
ExpiresByType image/x-icon "access plus 1 year"
ExpiresByType font/woff "access plus 1 year"
ExpiresByType font/woff2 "access plus 1 year"
ExpiresDefault "access plus 1 month"

# Remove useless etag
Header unset ETag
FileETag None

# Add x-frame security header
Header set X-Frame-Options "DENY"

# Rewrite engine ignition
RewriteEngine on
RewriteBase /

# Redirect from (.*)index.html to /$1
RewriteCond %{REQUEST_URI} ^(.*)index\.html$ [NC]
RewriteRule ^ %1 [R=301,L]

# Redirect from exemple.html to exemple
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.html [NC]
RewriteRule ^ %1 [R=301,L]

# Strip trailing slash if not a dir
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ $1 [R=301,L]

# Serve extensionless html files
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^(.*)$ $1.html

# Serve pre-compressed Brotli assets
RewriteCond %{HTTP:Accept-Encoding} br
RewriteCond %{REQUEST_FILENAME}.br -f
RewriteRule ^(.*)$ $1.br [L]

# Serve pre-compressed gzip assets
RewriteCond %{HTTP:Accept-Encoding} gzip
RewriteCond %{REQUEST_FILENAME}.gz -f
RewriteRule ^(.*)$ $1.gz [L]
