Skip to main content

Was bedeutet dieser Code?

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php [NC,L,QSA]

Kurz gesagt: Der Code leitet alle Anfragen, die nicht auf eine existierende Datei oder ein existierendes Verzeichnis verweisen, an die index.php-Datei um.

Stell dir vor, du rufst deine-seite.de/benutzer/profil auf. Normalerweise würde der Server nach einem Ordner benutzer und darin nach einer Datei oder einem Ordner profil suchen. Mit diesem Code wird der Server stattdessen die index.php aufrufen und ihr die Information /benutzer/profil übergeben. Deine PHP-Anwendung kann diese Information dann auswerten und die entsprechende Seite dynamisch generieren.

Das Ergebnis sind saubere, nutzerfreundliche URLs (z.B. /login statt /login.php).


 

Wie funktioniert der Code?

 

Der Code wird Zeile für Zeile vom Server abgearbeitet:

  1. RewriteEngine on: Schaltet die „Rewrite Engine“ von Apache ein. Ohne diese Zeile werden die folgenden Regeln ignoriert.
  2. RewriteCond %{REQUEST_FILENAME} !-f: Dies ist die erste Bedingung (RewriteCond).
    • %{REQUEST_FILENAME}: Das ist eine Server-Variable, die den vollständigen Pfad der angefragten Datei auf dem Dateisystem des Servers enthält.
    • !: Das ist ein Operator für „nicht“ (Negation).
    • -f: Das ist ein Test, der prüft, ob der angegebene Pfad eine existierende Datei (file) ist.
    • Zusammenhang: Die Bedingung ist also wahr, wenn der angefragte Pfad keine existierende Datei ist.
  3. RewriteCond %{REQUEST_FILENAME} !-d: Dies ist die zweite Bedingung.
    • -d: Dieser Test prüft, ob der angegebene Pfad ein existierendes Verzeichnis (directory) ist.
    • Zusammenhang: Die Bedingung ist wahr, wenn der angefragte Pfad kein existierendes Verzeichnis ist.
  4. RewriteRule ^(.*)$ /index.php [NC,L,QSA]: Diese Regel wird nur ausgeführt, wenn beide oberen Bedingungen (RewriteCond) zutreffen.
    • ^(.*)$: Dies ist ein regulärer Ausdruck, der die angefragte URL erfasst. Er bedeutet: „Nimm alles (.*) von Anfang (^) bis Ende ($) der URL“. Das erfasste wird intern gespeichert.
    • /index.php: Dies ist das Ziel der Umleitung. Die Anfrage wird intern an die index.php weitergeleitet.
    • [NC,L,QSA]: Das sind „Flags“, die das Verhalten der Regel steuern:
      • NC (No Case): Ignoriert die Groß- und Kleinschreibung. /Login wird wie /login behandelt.
      • L (Last): Stoppt die Abarbeitung weiterer Regeln. Wenn diese Regel zutrifft, ist Schluss.
      • QSA (Query String Append): Hängt den ursprünglichen Query-String (z.B. ?id=123) an die neue URL an.

 

Zusammenfassung der Begriffe

 

  • -f: Prüft, ob es sich um eine existierende Datei handelt.
  • -d: Prüft, ob es sich um ein existierendes Verzeichnis handelt.
  • REQUEST_FILENAME: Eine Variable, die den vollständigen Pfad der Anfrage im Dateisystem des Servers enthält (z.B. /var/www/html/mein-projekt/css/style.css).

Leave a Reply