# Nur *.php im Webroot, assets/ und versionierte Rechtstexte sollen direkt
# aufrufbar sein. Interne
# Verzeichnisse (Sessions, Mail-Logs, Migrationen, CLI-Skripte, Doku,
# App-Bausteine, Legacy-DB-Shim, Vendor-Bibliotheken), die Git-Metadaten und
# Konfigurationsdateien mit Zugangsdaten duerfen nicht direkt per URL
# abrufbar sein.

<IfModule mod_rewrite.c>
    RewriteEngine On

    # Alles auf HTTPS. Session-Cookies werden nur ueber HTTPS mit dem
    # secure-Flag gesetzt (app_start_session()), und HSTS wird ebenfalls nur
    # dann gesendet - ohne Redirect kaeme ein Nutzer per http an und bekaeme
    # eine Session ohne secure-Flag. X-Forwarded-Proto deckt den Fall ab,
    # dass Apache hinter dem Plesk-nginx-Proxy laeuft.
    RewriteCond %{HTTPS} !=on
    RewriteCond %{HTTP:X-Forwarded-Proto} !=https
    RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

    RewriteCond %{REQUEST_URI} ^/(var|database|scripts|docs|app|lib)/ [NC]
    RewriteRule ^ - [F]

    # Rechtstexte sind als speicherbare Textfassung absichtlich öffentlich;
    # alle anderen/versehentlich abgelegten Dateien im Ordner bleiben gesperrt.
    RewriteCond %{REQUEST_URI} ^/legal/ [NC]
    RewriteCond %{REQUEST_URI} !^/legal/(agb|datenschutz|avv|widerruf)-[0-9]{4}-[0-9]{2}-[0-9]{2}\.txt$ [NC]
    RewriteRule ^ - [F]

    # Vendor-Verzeichnisse werden ausschliesslich serverseitig eingebunden
    # (TCPDF ueber exportKaffeeliste.php); direkte URL-Aufrufe ihrer PHP-
    # Dateien sind nie erwuenscht.
    RewriteCond %{REQUEST_URI} ^/(TCPDF|PHPMailer|DataTables)/ [NC]
    RewriteRule ^ - [F]

    # .git waere sonst komplett herunterladbar, falls es je mit deployt wird.
    RewriteCond %{REQUEST_URI} ^/\.(git|claude|local)(/|$) [NC]
    RewriteRule ^ - [F]

    # Konventionelle /sitemap.xml auf die dynamische, host-korrekte Sitemap.
    RewriteRule ^sitemap\.xml$ sitemap.php [L]
</IfModule>

# Konfigurations- und Deploy-Dateien mit Zugangsdaten. sync_config.jsonc
# enthaelt das FTP-Passwort im Klartext und darf niemals ausgeliefert werden,
# auch nicht versehentlich mit hochgeladen.
<FilesMatch "^(env\.local\.php|env\.local\.example\.php|\.env.*|sync_config\.jsonc|composer\.(json|lock))$">
    <IfModule mod_authz_core.c>
        Require all denied
    </IfModule>
    <IfModule !mod_authz_core.c>
        Order allow,deny
        Deny from all
    </IfModule>
</FilesMatch>

<FilesMatch "\.(sql|md|jsonc|yml|yaml|sh|log)$">
    <IfModule mod_authz_core.c>
        Require all denied
    </IfModule>
    <IfModule !mod_authz_core.c>
        Order allow,deny
        Deny from all
    </IfModule>
</FilesMatch>
