Rewrite Rules sind Regeln, mit denen der Webserver eine angefragte Adresse intern auf eine andere umschreibt. Der Browser sieht davon nichts; er bekommt die Antwort auf die Adresse, die er angefragt hat. Darauf beruhen sprechende Adressen in jedem Content-Management-System.
- Rewrite Rules
Regeln, mit denen der Webserver eine angefragte Adresse intern auf eine andere umschreibt.
Beispiel: „Die Rewrite Rules leiten jede Anfrage an die Einstiegsdatei der Anwendung, wenn keine Datei mit dem Namen existiert.“Auch: Rewrite-Regeln, URL-Rewriting. Bei Apache stehen sie im Modul
mod_rewriteund meist in der .htaccess, bei nginx in einertry_files-Anweisung.Abgrenzung zur Weiterleitung: Eine Weiterleitung schickt den Browser an eine neue Adresse, und die steht danach in der Adresszeile. Ein Rewrite bleibt im Server und ändert die Adresszeile nicht.
Wofür Rewrite Rules im Alltag gebraucht werden
Für die eine Regel, die jede Anfrage an die Einstiegsdatei der Anwendung gibt, sofern keine Datei mit diesem Namen existiert. Daraus entstehen Adressen ohne Dateiendung und ohne Fragezeichen, und so sieht sie aus:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]Die zweite Zeile ist die Bedingung: Sie trifft zu, wenn an der angefragten Stelle keine Datei liegt. Die dritte schreibt die Anfrage dann auf die Einstiegsdatei um, und [L] beendet die Prüfung. Bilder und Stylesheets liegen als Datei vor und laufen an der Regel vorbei.
Drei weitere Rewrite Rules, die fast jede Website braucht
Die erste schickt Besucher von der Adresse mit Vorsilbe auf die ohne, die zweite erzwingt die verschlüsselte Verbindung, die dritte zieht eine umgezogene Adresse auf ihre neue. Alle drei tragen den Zusatz R=301 und sind damit Weiterleitungen: Die Adresszeile ändert sich, während ein Rewrite im Server bleibt.
# ohne www statt mit www
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [R=301,L]
# immer über HTTPS
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
# eine einzelne umgezogene Seite
RewriteRule ^alte-adresse/?$ /neue-adresse/ [R=301,L]Die ersten beiden gehören in diese Reihenfolge, sonst leitet der Server zweimal um und verschenkt eine Runde. Einzelne umgezogene Adressen gehören ins Weiterleitungskonzept, damit später nachvollziehbar bleibt, warum es die Regel gibt.
Woran Rewrite Rules oft scheitern
An der Reihenfolge. Die Regeln werden von oben nach unten geprüft, und eine frühe Regel, die abschließt, verhindert alles Folgende.
Der zweite Grund ist die Bedingung. Fehlt die Prüfung, ob die Datei existiert, landen auch Bilder und Stylesheets bei der Anwendung, und die Seite erscheint ohne Gestaltung.
Was Rewrite Rules kosten
Bei Apache in der .htaccess etwas Zeit je Aufruf, weil die Datei in jedem Verzeichnis des Pfades gesucht und gelesen wird. In der Serverkonfiguration ist derselbe Satz Regeln schneller.
Deshalb ist die .htaccess die Notlösung für geteiltes Hosting und die Serverkonfiguration der Platz auf einem eigenen Server.