# Sicherheits-Header für die gesamte Anwendung
<IfModule mod_headers.c>
    Header always set X-Content-Type-Options "nosniff"
    Header always set X-Frame-Options "DENY"
    Header always set Referrer-Policy "no-referrer-when-downgrade"
    # Nur sinnvoll, seit HTTPS erzwungen wird (siehe Rewrite-Regel weiter
    # unten) – weist Browser an, die Domain künftig grundsätzlich nur noch
    # per HTTPS aufzurufen, auch bei versehentlich eingegebenem http://.
    Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
    # geolocation=(self) erlaubt den "Mein Standort"-Button; Mikrofon/Kamera
    # werden von CamperCalc nicht benötigt und bleiben gesperrt.
    Header always set Permissions-Policy "geolocation=(self), microphone=(), camera=()"
    # Erlaubt eigene Skripte/Styles, OSM-Kartenkacheln und Leaflet (CDN mit SRI).
    Header always set Content-Security-Policy "default-src 'self'; img-src 'self' https://*.tile.openstreetmap.org data:; script-src 'self' https://unpkg.com; style-src 'self' 'unsafe-inline' https://unpkg.com; connect-src 'self'; frame-ancestors 'none'; base-uri 'none'; form-action 'self'"
</IfModule>

# Verzeichnislisting deaktivieren.
# Hinweis: Falls dein Hoster "AllowOverride Options" nicht erlaubt, führt
# "Options" in .htaccess zu einem 500 Internal Server Error ("Options not
# allowed here"). In dem Fall diese beiden Zeilen auskommentieren/entfernen
# und Directory-Listing stattdessen im Hosting-Panel deaktivieren (meist
# ohnehin Standard) oder einfach eine leere index.html in Unterordnern ohne
# eigene index.php ablegen.
Options -Indexes
Options -ExecCGI

# Nur bestimmte Dateitypen ausliefern (verhindert versehentliches Ausliefern
# von Backup-/Config-Dateien, falls sie fälschlich hier landen).
<FilesMatch "\.(bak|config|sql|log|ini|sh|env)$">
    Require all denied
</FilesMatch>

# PHP-Fehlerausgabe wird bewusst NICHT hier per php_flag/php_value gesetzt:
# Auf PHP-FPM-Hosts (heute der Regelfall bei den meisten Providern) kennt
# Apache diese Direktiven nicht -> sofortiger 500 Internal Server Error,
# noch bevor PHP überhaupt läuft. Die Einstellung erfolgt stattdessen
# portabel per ini_set() in config.php.

# HTTPS erzwingen — jetzt AKTIV, seit ein eigenes SSL-Zertifikat vorhanden
# ist. Die Bedingung prüft sowohl %{HTTPS} (greift, wenn Apache TLS direkt
# terminiert) als auch X-Forwarded-Proto (greift, wenn ein vorgeschalteter
# Proxy/Load-Balancer TLS terminiert und diesen Header korrekt durchreicht).
# Nur EIN Weiterleitungsschritt (R=301 auf die absolute https-URL), kein
# doppelter Rewrite -> kein Redirect-Loop, solange Apache bei einer echten
# HTTPS-Anfrage %{HTTPS} korrekt auf "on" setzt.
#
# WICHTIG: Falls nach dem Aktivieren erneut ein "Umleitungsfehler" auftritt
# (siehe frühere Debug-Session), sitzt zwischen Browser und Apache doch noch
# ein Proxy, der weder %{HTTPS} noch X-Forwarded-Proto korrekt weiterreicht.
# In dem Fall diesen Block wieder auskommentieren und HTTPS stattdessen über
# die Einstellung im Hosting-Panel ("HTTPS erzwingen") durchsetzen.
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{HTTPS} off
    RewriteCond %{HTTP:X-Forwarded-Proto} !https
    RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</IfModule>
