# ==========================================================================
# New Hertz Geradores
# Apache / cPanel (hospedagem compartilhada)
# ==========================================================================

Options -Indexes
DirectoryIndex index.php index.html

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /

    # ----------------------------------------------------------------------
    # 1) HTTPS obrigatório
    #
    # ATENÇÃO – site atrás do Cloudflare:
    # as duas condições extras abaixo evitam loop de redirecionamento.
    # Quando o Cloudflare fala com a origem em HTTP (modo "Flexible"),
    # o Apache vê HTTPS=off e redirecionaria para sempre. Os cabeçalhos
    # X-Forwarded-Proto e CF-Visitor informam que o visitante JÁ está em
    # HTTPS, então não redirecionamos.
    #
    # Mesmo assim, use o modo "Full (strict)" no Cloudflare. "Flexible"
    # deixa o trecho Cloudflare -> servidor sem criptografia.
    # ----------------------------------------------------------------------
    RewriteCond %{HTTPS} !=on
    RewriteCond %{HTTP:X-Forwarded-Proto} !https
    RewriteCond %{HTTP:CF-Visitor} !'"scheme":"https"' [NC]
    RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

    # ----------------------------------------------------------------------
    # 2) Domínio sem "www"
    # ----------------------------------------------------------------------
    RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
    RewriteRule ^ https://%1%{REQUEST_URI} [R=301,L]

    # ----------------------------------------------------------------------
    # 3) Bloqueia acesso direto à pasta includes/
    # ----------------------------------------------------------------------
    RewriteRule ^includes/ - [F,L]

    # ----------------------------------------------------------------------
    # 4) URLs sem a extensão .php
    #    /politica-de-privacidade  ->  politica-de-privacidade.php
    # ----------------------------------------------------------------------

    # Os links do site usam .php explicitamente, para funcionar mesmo sem
    # mod_rewrite. A regra abaixo é só um bônus: se o mod_rewrite estiver
    # ativo, as URLs sem extensão também passam a funcionar.
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME}\.php -f
    RewriteRule ^(.+?)/?$ $1.php [L]
</IfModule>

# --------------------------------------------------------------------------
# 5) Página de erro 404
# --------------------------------------------------------------------------
ErrorDocument 404 /404.php

# --------------------------------------------------------------------------
# 6) Compressão
# --------------------------------------------------------------------------
<IfModule mod_deflate.c>
    AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css
    AddOutputFilterByType DEFLATE application/javascript application/x-javascript text/javascript
    AddOutputFilterByType DEFLATE application/json application/xml application/rss+xml
    AddOutputFilterByType DEFLATE image/svg+xml application/vnd.ms-fontobject
    AddOutputFilterByType DEFLATE font/ttf font/otf
</IfModule>

# --------------------------------------------------------------------------
# 7) Cache de arquivos estáticos
# --------------------------------------------------------------------------
<IfModule mod_expires.c>
    ExpiresActive On
    ExpiresDefault                          "access plus 1 month"
    ExpiresByType text/html                 "access plus 0 seconds"
    ExpiresByType text/css                  "access plus 1 year"
    ExpiresByType application/javascript    "access plus 1 year"
    ExpiresByType text/javascript           "access plus 1 year"
    ExpiresByType image/jpeg                "access plus 1 year"
    ExpiresByType image/png                 "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 font/woff2                "access plus 1 year"
    ExpiresByType application/xml           "access plus 1 day"
</IfModule>

<IfModule mod_headers.c>
    # ----------------------------------------------------------------------
    # 8) Cabeçalhos de segurança
    # ----------------------------------------------------------------------
    Header always set X-Content-Type-Options "nosniff"
    Header always set Referrer-Policy "strict-origin-when-cross-origin"
    Header always set X-Frame-Options "SAMEORIGIN"
    Header always set Permissions-Policy "geolocation=(), microphone=(), camera=(), payment=(), usb=(), interest-cohort=()"
    Header always set Cross-Origin-Opener-Policy "same-origin"

    # HSTS: ative somente depois de confirmar que o HTTPS funciona em todas as páginas.
    # Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"

    # Remove o cabeçalho que expõe a versão do PHP
    Header always unset X-Powered-By

    <FilesMatch "\.(css|js|jpg|jpeg|png|webp|svg|ico|woff2)$">
        Header set Cache-Control "public, max-age=31536000, immutable"
    </FilesMatch>

    # ----------------------------------------------------------------------
    # 8b) Páginas PHP nunca podem ser cacheadas
    #
    # CRÍTICO com Cloudflare: o HTML carrega o token CSRF do formulário,
    # que é único por visitante. Se um proxy guardar essa página, todos
    # receberiam o token de outra pessoa e o formulário passaria a recusar
    # todos os envios. O no-store impede que Cloudflare, proxies e o
    # navegador guardem essas respostas.
    # ----------------------------------------------------------------------
    <FilesMatch "\.php$">
        Header always set Cache-Control "private, no-store, no-cache, must-revalidate, max-age=0"
        Header always set Pragma "no-cache"
        Header always unset Expires
        Header always set Expires "0"
        Header always append Vary "Cookie"
    </FilesMatch>
</IfModule>

# --------------------------------------------------------------------------
# 9) Charset padrão
# --------------------------------------------------------------------------
AddDefaultCharset UTF-8

# --------------------------------------------------------------------------
# 10) Bloqueia arquivos sensíveis
# --------------------------------------------------------------------------
<FilesMatch "^(config\.php|\.htaccess|\.htpasswd|.*\.(ini|log|sh|bak|sql))$">
    Require all denied
</FilesMatch>
