65 lines
2.6 KiB
ApacheConf
65 lines
2.6 KiB
ApacheConf
# 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>
|