# Sensible Dateien niemals ausliefern (Defense-in-Depth), auch wenn sie im # Docroot liegen und die -f-Regel unten sie sonst direkt serviert. Require all denied Require all denied # Backend-Editor-UI (statisch) nicht direkt ausliefern — nur über die # admin-geschützte Route /stadt-editor (pages/stadt-editor.php) erreichbar. Require all denied RewriteEngine On # Kein RewriteBase — Apache nutzt den Request-Pfad automatisch. # Funktioniert fuer alle Deploy-Ziele: # localhost/geograsim/App/ (lokal, XAMPP) # staatsgeheimnis.at/geograsim/ (Subpfad-Prod) # geograsim.at/ (eigene Domain-Prod) # Mit hart gesetztem RewriteBase gab es auf der eigenen Domain einen # Endlos-Redirect-Loop (AH00124: 10 internal redirects). # Statische Dateien direkt ausliefern RewriteRule ^dist/ - [L] RewriteRule ^assets/ - [L] RewriteRule ^node_modules/ - [L] RewriteRule ^src/ - [L] # Bestehende Dateien/Ordner direkt ausliefern RewriteCond %{REQUEST_FILENAME} -f RewriteRule . - [L] RewriteCond %{REQUEST_FILENAME} -d RewriteRule . - [L] # Header-Migration (N.6.2): alte .html-URLs auf umbenannte .php-Versionen umlenken. # Greift nur, wenn .html nicht existiert UND .php-Variante vorhanden ist. # Die obigen REQUEST_FILENAME -f / -d Regeln haben schon abgebrochen, wenn # die .html-Datei real noch da liegt — hier kommt also nur an, was nicht (mehr) existiert. RewriteCond %{REQUEST_FILENAME} ^(.+)\.html$ RewriteCond %1.php -f RewriteRule ^(.+?)\.html$ $1.php [L] # Extension-less URLs auf .php auflösen, falls .php-Datei existiert. # Beispiel: /kontakt -> /kontakt.php (sofern kontakt.php existiert und # kein gleichnamiger Ordner/File). Vorher hat das implizit MultiViews # über alte .html-Files gemacht — seit der .html→.php-Migration fällt # das weg, also brauchen wir hier eine explizite Regel. RewriteCond %{REQUEST_FILENAME}.php -f RewriteRule ^([^.]+)$ $1.php [L] # Alles andere -> Front Controller RewriteRule ^(.*)$ index.php [QSA,L]