RewriteEngine On RewriteBase / # Lang-lebiger Cache fuer gehashte Build-Assets (Vite haengt bei jeder Aenderung einen # neuen Hash an den Dateinamen) und hochgeladene Bilder (bekommen beim Upload einen # zufaelligen Dateinamen) - beide aendern sich unter derselben URL nie, "immutable" ist # hier also sicher. Ueber mod_headers statt mod_expires, da Letzteres nicht ueberall # aktiviert ist. Header set Cache-Control "public, max-age=31536000, immutable" Header set Cache-Control "public, max-age=31536000, immutable" # Ohne dies leitet Apache (mod_dir) Anfragen an /api/uploads mit einem 301 auf # /api/uploads/ um, bevor mod_rewrite greifen kann - weil api/uploads/ als # echtes Verzeichnis existiert. Bei einem POST mit Datei-Upload geht dabei der # Body verloren (der Browser sendet den redirect als GET nach), wodurch der # Upload mit "Methode nicht erlaubt" fehlschlägt. DirectorySlash Off # API-Requests an den PHP-Front-Controller weiterleiten RewriteCond %{REQUEST_URI} ^/api/ RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^api/(.*)$ api/public/index.php [QSA,L] # Dynamische sitemap.xml (DB-generiert) RewriteRule ^sitemap\.xml$ api/public/sitemap.php [L] # Alles andere: SPA-Fallback auf index.html (React Router übernimmt das Routing) RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^ index.html [QSA,L]