Umschreiben von URLs mit mod_rewrite für Apache unter Debian 10

Einführung

Mit dem + mod_rewrite + - Modul von Apache können Sie URLs übersichtlicher umschreiben und lesbare Pfade in codefreundliche Abfragezeichenfolgen umwandeln. Außerdem können Sie URLs basierend auf Bedingungen neu schreiben.

Mit einer + .htaccess + - Datei können Sie Überschreibungsregeln erstellen und anwenden, ohne auf Serverkonfigurationsdateien zugreifen zu müssen. Indem Sie die Datei "+ .htaccess +" im Stammverzeichnis Ihrer Website ablegen, können Sie das Umschreiben auf Site- oder Verzeichnisbasis verwalten.

In diesem Lernprogramm aktivieren Sie "+ mod_rewrite " und verwenden " .htaccess +" - Dateien, um eine grundlegende URL-Umleitung zu erstellen. Anschließend werden einige erweiterte Anwendungsfälle erläutert.

Voraussetzungen

Um diesem Tutorial zu folgen, benötigen Sie:

Schritt 1 - Aktivieren von mod_rewrite

Damit Apache die Regeln zum Umschreiben versteht, müssen wir zuerst + mod_rewrite + aktivieren. Es ist bereits installiert, in einer Apache-Standardinstallation jedoch deaktiviert. Verwenden Sie den Befehl + a2enmod +, um das Modul zu aktivieren:

sudo a2enmod rewrite

Dadurch wird das Modul aktiviert oder Sie werden benachrichtigt, dass das Modul bereits aktiviert ist. Um diese Änderungen zu übernehmen, starten Sie Apache neu:

sudo systemctl restart apache2

+ mod_rewrite + ist jetzt voll aktiviert. Im nächsten Schritt richten wir eine "+ .htaccess +" - Datei ein, mit der wir Umschreibregeln für Umleitungen definieren.

Schritt 2 - Einrichten von .htaccess

Mit einer "+ .htaccess " - Datei können wir unsere Umschreiberegeln ändern, ohne auf Serverkonfigurationsdateien zugreifen zu müssen. Aus diesem Grund ist " .htaccess +" für die Sicherheit Ihrer Webanwendung von entscheidender Bedeutung. Der Punkt vor dem Dateinamen stellt sicher, dass die Datei ausgeblendet ist.

Bevor Sie mit der Verwendung von "+ .htaccess +" - Dateien beginnen, müssen Sie einige weitere Einstellungen einrichten und sichern.

Standardmäßig verbietet Apache die Verwendung einer "+ .htaccess " - Datei zum Anwenden von Umschreiberegeln. Daher müssen Sie zuerst Änderungen an der Datei zulassen. Öffnen Sie die Apache-Standardkonfigurationsdatei mit ` nano +` oder Ihrem bevorzugten Texteditor:

sudo nano /etc/apache2/sites-available/000-default.conf

In dieser Datei finden Sie einen "+ <VirtualHost *: 80> +" - Block, der in der ersten Zeile beginnt. Fügen Sie in diesem Block den folgenden neuen Block hinzu, damit Ihre Konfigurationsdatei wie folgt aussieht. Stellen Sie sicher, dass alle Blöcke richtig eingerückt sind:

/etc/apache2/sites-available/000-default.conf

<VirtualHost *:80>






   . . .
</VirtualHost>

Speichern und schließen Sie die Datei. Wenn Sie "+ nano " verwendet haben, drücken Sie " STRG + X ", " Y " und dann " ENTER +".

Überprüfen Sie dann Ihre Konfiguration:

sudo apache2ctl configtest

Wenn keine Fehler vorliegen, starten Sie Apache neu, damit Ihre Änderungen wirksam werden:

sudo systemctl restart apache2

Erstellen Sie nun eine "+ .htaccess +" - Datei im Webstamm:

sudo nano /var/www/html/.htaccess

Fügen Sie diese Zeile oben in die neue Datei ein, um die Rewrite-Engine zu aktivieren.

/var/www/html/.htaccess

RewriteEngine on

Speichern Sie die Datei und beenden Sie sie.

Sie haben jetzt eine funktionsfähige "+ .htaccess +" - Datei, mit der Sie die Routing-Regeln Ihrer Webanwendung steuern können. Im nächsten Schritt erstellen wir eine Beispiel-Website-Datei, anhand derer wir die Umschreiberegeln demonstrieren.

Schritt 3 - URL-Rewrites konfigurieren

Hier richten wir eine grundlegende URL-Umschreibung ein, die hübsche URLs in tatsächliche Pfade zu Seiten konvertiert. Insbesondere werden wir Benutzern erlauben, auf "+ http: /// about " zuzugreifen und eine Seite mit dem Namen " about.html +" anzuzeigen.

Beginnen Sie mit dem Erstellen einer Datei mit dem Namen "+ about.html +" im Webstamm:

sudo nano /var/www/html/about.html

Kopieren Sie den folgenden HTML-Code in die Datei, speichern und schließen Sie sie.

/var/www/html/about.html

<html>
   <head>
       <title>About Us</title>
   </head>
   <body>
       <h1>About Us</h1>
   </body>
</html>

Sie können auf diese Seite unter + http: /// about.html + zugreifen. Beachten Sie jedoch, dass beim Versuch, auf + http: /// about + zuzugreifen, der Fehler * 404 Not Found * angezeigt wird. Um stattdessen mit "+ / about +" auf die Seite zuzugreifen, erstellen wir eine Umschreiberegel.

Alle + RewriteRules + folgen diesem Format:

Allgemeine RewriteRule-Struktur

RewriteRule pattern substitution [flags]
  • + RewriteRule + spezifiziert die Direktive.

  • + pattern + ist ein regelmäßiger Ausdruck, der mit der gewünschten Zeichenfolge aus der URL übereinstimmt Browser.

  • "+ Substitution +" ist der Pfad zur tatsächlichen URL, d.h. der Pfad der Datei, die Apache bedient.

  • + Flags + sind optionale Parameter, mit denen die Funktionsweise der Regel geändert werden kann.

Erstellen wir unsere Regel zum Umschreiben von URLs. Öffnen Sie die Datei "+ .htaccess":

sudo nano /var/www/html/.htaccess

Fügen Sie nach der ersten Zeile das folgende + RewriteRule + hinzu und speichern Sie die Datei:

/var/www/html/.htaccess

RewriteEngine on

In diesem Fall ist "+ ^ about $ " das Muster, " about.html " die Substitution und " [NC] +" ein Flag. In unserem Beispiel werden einige Zeichen mit besonderer Bedeutung verwendet:

  • "+ ^ " gibt den Anfang der URL nach " / +" an.

  • + $ + zeigt das Ende der URL an.

  • + about + stimmt mit der Zeichenfolge "about" überein.

  • + about.html + ist die tatsächliche Datei, auf die der Benutzer zugreift.

  • + [NC] + ist ein Flag, das die Groß- und Kleinschreibung der Regel unberücksichtigt lässt.

Sie können jetzt in Ihrem Browser auf "+ http: /// about " zugreifen. Mit der oben gezeigten Regel verweisen die folgenden URLs auch auf " about.html +":

  • + http: /// about +, aufgrund der Regeldefinition.

  • + http: /// About +, da bei der Regel die Groß- und Kleinschreibung nicht berücksichtigt wird.

  • + http: /// about.html +, da der ursprüngliche Dateiname immer funktioniert.

Folgendes wird jedoch nicht funktionieren:

  • + http: /// about / +, da die Regel explizit angibt, dass nach + about + möglicherweise nichts steht, da das Zeichen + $ + nach + about + erscheint.

  • "+ http: /// contact ", da es nicht mit der Zeichenfolge " about +" in der Regel übereinstimmt.

Sie haben jetzt eine funktionsfähige "+ .htaccess +" - Datei mit einer Grundregel, die Sie ändern und an Ihre Bedürfnisse anpassen können. In den folgenden Abschnitten werden zwei weitere Beispiele für häufig verwendete Anweisungen gezeigt.

Beispiel 1 - Vereinfachen von Abfragezeichenfolgen mit RewriteRule

In Webanwendungen werden häufig Query-Strings verwendet, die an eine URL angehängt werden, indem nach der Adresse ein Fragezeichen ("? +") Eingefügt wird. Separate Parameter werden durch ein kaufmännisches Und (` & +`) getrennt. Abfragezeichenfolgen können verwendet werden, um zusätzliche Daten zwischen einzelnen Anwendungsseiten zu übertragen.

Beispielsweise kann eine in PHP geschriebene Suchergebnisseite eine URL wie "+ http: //example.com/results.php? Item = shirt & season = summer " verwenden. In diesem Beispiel werden zwei zusätzliche Parameter an das imaginäre Anwendungsskript " result.php " übergeben: " item " mit dem Wert " shirt " und " season " mit dem Wert " summer +". Die Anwendung verwendet möglicherweise die Abfragezeichenfolgeninformationen, um die richtige Seite für den Besucher zu erstellen.

Umschreibungsregeln für Apache werden häufig verwendet, um so lange und unangenehme Links wie die oben genannten in freundliche URLs zu vereinfachen, die einfacher einzugeben und visuell zu interpretieren sind. In diesem Beispiel möchten wir den obigen Link zu "+ http: // example.com / shirt / summer " vereinfachen. Die Parameterwerte " shirt " und " summer +" befinden sich weiterhin in der Adresse, jedoch ohne die Abfragezeichenfolge und den Skriptnamen.

Hier ist eine Regel, um dies zu implementieren:

Einfache Ersetzung

RewriteRule ^/$ results.php?item=&season= [QSA]

Das "+ shirt / summer " wird explizit in der angeforderten Adresse abgeglichen und Apache wird angewiesen, stattdessen " results.php? Item = shirt & season = summer +" zu liefern.

Die + [QSA] + Flags werden häufig in Umschreiberegeln verwendet. Sie weisen Apache an, zusätzliche Abfragezeichenfolgen an die bereitgestellte URL anzuhängen. Wenn der Besucher also "+ http: //example.com/shirt/summer? " Eingibt, antwortet der Server mit " results.php? Item = shirt & season =" Sommer + `. Ohne diese würde die zusätzliche Abfragezeichenfolge verworfen.

Während diese Methode den gewünschten Effekt erzielt, sind sowohl der Elementname als auch die Jahreszeit in der Regel fest codiert. Dies bedeutet, dass die Regel nicht für andere Elemente wie "+ pants " oder Jahreszeiten wie " winter +" gilt.

Um die Regel allgemeiner zu gestalten, können wir regular expressions verwenden, um Teile der ursprünglichen Adresse abzugleichen und diese Teile in a zu verwenden Substitutionsmuster. Die geänderte Regel sieht dann so aus:

Einfache Ersetzung

RewriteRule ^/ results.php?item=$1&season=$2 [QSA]

Die erste Gruppe mit regulären Ausdrücken in Klammern stimmt mit einer Zeichenfolge überein, die alphanumerische Zeichen und Zahlen wie "+ shirt " oder " pants " enthält, und speichert das übereinstimmende Fragment als " $ 1 " - Variable. Die zweite Gruppe regulärer Ausdrücke in Klammern entspricht genau " Sommer", "+ Winter", "+ Herbst" oder "+ Frühling" und speichert das übereinstimmende Fragment auf ähnliche Weise als "+ $ 2 +".

Die übereinstimmenden Fragmente werden dann in der resultierenden URL in den Variablen "+ item " und " season " anstelle der zuvor verwendeten fest codierten Werte " shirt " und " summer +" verwendet.

Das obige Beispiel konvertiert "+ http: // example.com / pants / summer " in " http: //example.com/results.php? Item = pants & season = summer +". Dieses Beispiel ist auch zukunftssicher, sodass mehrere Elemente und Jahreszeiten mit einer einzigen Regel korrekt umgeschrieben werden können.

Beispiel 2 - Hinzufügen von Bedingungen mit Logik mithilfe von RewriteConds

Rewrite-Regeln werden nicht immer ohne Einschränkungen einzeln ausgewertet. Mit der Direktive "+ RewriteCond " können wir unseren Umschreiberegeln Bedingungen hinzufügen, um zu steuern, wann die Regeln verarbeitet werden. Alle ` RewriteConds +` befolgen das folgende Format:

Allgemeine RewriteCond-Struktur

RewriteCond TestString Condition [Flags]
  • + RewriteCond + spezifiziert die Direktive + RewriteCond +.

  • + TestString + ist der String, gegen den getestet werden soll.

  • + Bedingung + ist das Muster oder die Bedingung, die erfüllt werden soll.

  • + Flags + sind optionale Parameter, die die Bedingungen und Bewertungsregeln ändern können.

Wenn eine + RewriteCond + als wahr ausgewertet wird, wird die nächste + RewriteRule + berücksichtigt. Ist dies nicht der Fall, wird die Regel verworfen. Es können mehrere + RewriteConds + nacheinander verwendet werden, obwohl alle mit true bewertet werden müssen, damit die nächste Regel berücksichtigt wird.

Angenommen, Sie möchten alle Anforderungen an nicht vorhandene Dateien oder Verzeichnisse auf Ihrer Site zurück auf die Startseite leiten, anstatt die Standardfehlerseite * 404 Not Found * anzuzeigen. Dies kann mit folgenden Bedingungsregeln erreicht werden:

Leiten Sie alle Anforderungen an nicht vorhandene Dateien und Verzeichnisse zur Homepage um

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /

Mit dem oben genannten:

  • +% {REQUEST_FILENAME} + ist die zu überprüfende Zeichenfolge. In diesem Fall ist es der angeforderte Dateiname, eine Systemvariable, die für jede Anforderung verfügbar ist.

  • + -f + ist eine eingebaute Bedingung, die überprüft, ob der angeforderte Name auf der Festplatte existiert und eine Datei ist. Das "! +" Ist ein Negationsoperator. Kombiniert ergibt `! - f +` nur dann true, wenn der angegebene Name nicht existiert oder keine Datei ist.

  • In ähnlicher Weise wird +! - d + nur dann als wahr ausgewertet, wenn der angegebene Name nicht existiert oder kein Verzeichnis ist.

Das "+ RewriteRule " in der letzten Zeile wird nur für Anforderungen an nicht vorhandene Dateien oder Verzeichnisse wirksam. Die ` RewriteRule ` selbst ist sehr einfach und leitet jede Anfrage an das ` / +` Website-Stammverzeichnis weiter.

Fazit

Mit + mod_rewrite + können Sie für Menschen lesbare URLs erstellen. In diesem Lernprogramm haben Sie gelernt, wie Sie mit der Direktive "+ RewriteRule " URLs umleiten, einschließlich URLs mit Abfragezeichenfolgen. Sie haben auch gelernt, wie Sie URLs mit der Direktive ` RewriteCond +` bedingt umleiten.

Wenn Sie mehr über + mod_rewrite + erfahren möchten, besuchen Sie Apaches mod_rewrite Introduction und http: //httpd.apache .org / docs / current / mod / mod_rewrite.html [Apaches offizielle Dokumentation für mod_rewrite].