So richten Sie mod_rewrite für Apache unter CentOS 7 ein

Einführung

Apache ist ein modularer Webserver, mit dem Sie seine Funktionen anpassen können, indem Sie Module aktivieren und deaktivieren. Dies bietet Administratoren die Möglichkeit, die Funktionalität von Apache an die Anforderungen ihrer Webanwendung anzupassen.

In diesem Tutorial werden wir Apache auf einem CentOS 7-Server installieren, sicherstellen, dass das + mod_rewrite + - Modul aktiviert ist, und einige wesentliche Funktionen untersuchen.

Voraussetzung

Stellen Sie vor dem Ausführen dieses Lernprogramms sicher, dass Sie einen regulären Benutzer ohne Rootberechtigung mit sudo-Berechtigungen haben. Weitere Informationen zum Einrichten eines Benutzers mit diesen Berechtigungen finden Sie in unserem Handbuch unter https://www.digitalocean.com/community/tutorials/how-to-create-a-sudo-user-on-centos-quickstart [ So erstellen Sie einen Sudo-Benutzer unter CentOS.

Schritt 1 - Installieren von Apache

Wir installieren Apache mit + yum +, dem Standard-Paketverwaltungsprogramm für CentOS.

sudo yum install httpd

Wenn Sie mit "" dazu aufgefordert werden, geben Sie " Y " ein, und drücken Sie die Taste " ENTER +", um die Installation zu autorisieren.

Starten Sie als Nächstes den Apache-Daemon, einen eigenständigen Prozess, der einen Pool von untergeordneten Prozessen oder Threads zur Verarbeitung von Anforderungen erstellt, mit dem Dienstprogramm + systemctl +:

sudo systemctl start httpd

Um sicherzustellen, dass Apache erfolgreich gestartet wurde, überprüfen Sie seinen Status mit dem Befehl + status +:

sudo systemctl status httpd
Output. . .
systemd[1]: Starting The Apache HTTP Server...
systemd[1]:

Wenden wir uns bei laufendem Apache den Modulen zu.

Schritt 2 - Überprüfen von mod_rewrite

Ab CentOS Version 7 ist das Apache-Modul + mod_rewrite + standardmäßig aktiviert. Wir werden überprüfen, ob dies der Fall ist mit dem Befehl "+ httpd " und dem Flag " -M +", das eine Liste aller geladenen Module ausgibt:

httpd -M
Output . . .
remoteip_module (shared)
reqtimeout_module (shared)

setenvif_module (shared)
slotmem_plain_module (shared)
. . .

Wenn das + rewrite_module + nicht in der Ausgabe erscheint, aktivieren Sie es, indem Sie die Datei + 00-base.conf + mit dem Editor + vi + bearbeiten:

sudo vi /etc/httpd/conf.modules.d/00-base.conf

Sobald die Textdatei geöffnet ist, geben Sie "+ i +" ein, um in den Einfügemodus zu wechseln, und fügen Sie die hervorgehobene Zeile unten hinzu oder kommentieren Sie sie aus:

/etc/httpd/conf.modules.d/00-base.conf

#
# This file loads most of the modules included with the Apache HTTP
# Server itself.
#
. . .

. . .

Drücken Sie nun + ESC +, um den Einfügemodus zu verlassen. Geben Sie dann ": x +" ein und drücken Sie die Taste " ENTER +", um die Datei zu speichern und zu beenden.

Übernehmen Sie als Nächstes die Konfigurationsänderung, indem Sie Apache neu starten:

sudo systemctl restart httpd

Wenn Apache installiert und das "+ mod_rewrite " - Modul aktiviert ist, können wir die Verwendung einer " .htaccess +" - Datei konfigurieren.

Schritt 3 - Einrichten einer .htaccess-Datei

Eine "+ .htaccess " - Datei ermöglicht das Definieren von Direktiven für Apache, einschließlich einer " RewriteRule ", auf Domänenbasis, ohne die Serverkonfigurationsdateien zu ändern. In Linux werden Dateien, denen ein Punkt (". +") Vorangestellt ist, als versteckt behandelt.

Bevor wir eine "+ .htaccess " - Datei verwenden, müssen wir die " AllowOverride +" - Einstellung aktualisieren, um Apache-Direktiven überschreiben zu können.

sudo vi /etc/httpd/conf/httpd.conf

Suchen Sie den Abschnitt "+ <Directory / var / www / html> " und ändern Sie die Direktive " AllowOverride" von "+ None" in "+ All":

/etc/httpd/conf/httpd.conf

. . .
<Directory /var/www/html>
. . .
#
# AllowOverride controls what directives may be placed in .htaccess files.
# It can be "All", "None", or any combination of the keywords:
# Options FileInfo AuthConfig Limit
#

. . .
</Directory>
. . .

Speichern und beenden Sie die Datei und starten Sie Apache neu, um die Änderung zu übernehmen:

sudo systemctl restart httpd

Als nächstes erstellen Sie eine "+ .htaccess" -Datei im Standard-Dokumentenstamm "+ / var / www / html" für Apache.

sudo vi /var/www/html/.htaccess

Fügen Sie die folgende Zeile oben in die Datei ein, um die + RewriteEngine + zu aktivieren, die Apache anweist, alle folgenden Regeln zu verarbeiten:

/var/www/html/.htaccess

RewriteEngine On

Speichern und schließen Sie die Datei.

Sie haben jetzt eine "+ .htaccess " - Datei, mit der Sie Regeln definieren können, um URLs nach Bedarf zu bearbeiten. Bevor wir mit dem Schreiben der eigentlichen Regeln beginnen, nehmen wir uns einen Moment Zeit, um die grundlegende Syntax von " mod_rewrite +" zu überprüfen.

Schritt 4 - Erkunden der RewriteRule-Syntax

Mit der Direktive "+ RewriteRule " können wir die Anfrage an Apache basierend auf der URL neu zuordnen. Eine ` .htaccess +` - Datei kann mehr als eine Umschreiberegel enthalten, aber zur Laufzeit wendet Apache die Regeln in der festgelegten Reihenfolge an. Eine Umschreiberegel besteht aus der folgenden Struktur:

+ RewriteRule Pattern Substitution [Flags] +

  • RewriteRule: Gibt die Direktive "+ RewriteRule +" an

  • Pattern: Ein PCRE (Perl-kompatibler regulärer Ausdruck), der der gewünschten Zeichenfolge entspricht. Weitere Informationen zu regulären Ausdrücken finden Sie unter here.

  • Substitution: Wohin sollen die übereinstimmenden Anfragen gesendet werden?

  • [Flags]: Optionale Parameter zum Ändern der Regel. Weitere Informationen zu den verfügbaren Flags und deren Bedeutung finden Sie in der Apache-Dokumentation unter Rewrite Flags.

Die + RewriteRule + ist das Arbeitspferd der + mod_rewrite + Direktiven, weshalb wir uns in diesem Tutorial hauptsächlich darauf konzentrieren.

Schritt 5 - Erkunden der RewriteCond-Syntax

Mit der Direktive "+ RewriteCond +" können wir einer Überschreibungsregel Bedingungen hinzufügen. Eine Umschreibebedingung besteht aus der folgenden Struktur:

+ RewriteCond TestString Condition [Flags] +

  • RewriteCond: Gibt die Direktive "+ RewriteCond +" an

  • TestString: Ein String, gegen den getestet werden soll

  • Condition: Ein Muster, das übereinstimmt

  • [Flags]: Optionaler Parameter zum Ändern der Bedingung.

Die Direktive + RewriteCond + erlaubt es Apache nicht, nachfolgende Umschreibregeln zu berücksichtigen, es sei denn, die bestimmte Bedingung wird als wahr ausgewertet.

Schritt 6 - Einrichten von Dateien

Wir richten eine grundlegende Regel zum Umschreiben ein, mit der Benutzer eine Seite "+ about.html " aufrufen können, ohne die Dateierweiterung (" .html ") in die Adressleiste eines Webbrowsers eingeben zu müssen. Beginnen Sie, indem Sie eine ` about.html +` - Datei im Dokumentenstammverzeichnis erstellen:

sudo vi /var/www/html/about.html

Kopieren Sie den folgenden HTML-Code in die Datei:

/var/www/html/about.html

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

Speichern und schließen Sie die Datei.

Navigieren Sie in einem Webbrowser zu der folgenden Adresse:

http:///about.html

Sie sollten eine weiße Seite mit * About Us * darauf sehen. Wenn Sie * .html * aus der Adressleiste entfernen und die Seite neu laden, wird der Fehler 404 * Nicht gefunden * angezeigt. Apache kann nur über den vollständigen Dateinamen auf Komponenten zugreifen, dies können wir jedoch mit einer Umschreiberegel ändern.

Schritt 7 - Einrichten einer RewriteRule

Wir möchten, dass Besucher der Seite * Über uns * darauf zugreifen können, ohne "+ .html +" eingeben zu müssen. Um dies zu erreichen, erstellen wir eine Regel.

Öffnen Sie die Datei "+ .htaccess":

sudo vi /var/www/html/.htaccess

Fügen Sie nach der Zeile "+ RewriteEngine On +" Folgendes hinzu:

/var/www/html/.htaccess

RewriteRule ^about$ about.html [NC]

Speichern und schließen Sie die Datei.

Besucher können jetzt die Seite * Über uns * mit der URL + http: /// about + aufrufen.

Sehen wir uns die Umschreiberegel an:

+ ^ about $ + dient als das Muster, das von der URL abgeglichen wird, und was der Benutzer in seinen Browser eingibt. + In unserem Beispiel wird ein paar Metacharacters verwendet, um sicherzustellen, dass der Begriff nur an einer bestimmten Stelle in der URL vorhanden ist:

  • + ^ + gibt den Anfang der URL an, nachdem + / + entfernt wurde.

  • + & + bedeutet das Ende der URL

+ about.html + zeigt den Pfad zu der Datei, die Apache bedient, wenn es auf ein passendes Muster stößt.

+ [NC] + ist ein Flag, das die Umschreiberegel anweist, die Groß- und Kleinschreibung nicht zu berücksichtigen, damit ein Benutzer in die URL Klein- und Großbuchstaben eingeben kann. Die folgenden URLs verweisen beispielsweise auf die Datei "+ about.html +":

  • /Über

  • /Über

  • /ÜBER

Mit einer einfachen Umschreiberegel haben wir dem Zugriff der Benutzer auf die Seite * Über uns * einen dynamischen Aspekt hinzugefügt.

Gemeinsame Muster

Da wir nun ein grundlegendes Verständnis für Umschreibregeln haben, werden wir in diesem Abschnitt zwei weitere Beispiele untersuchen.

Beispieldateien können eingerichtet werden, aber in diesem Lernprogramm werden sie nicht erstellt. nur das umschreiben regelt sich von selbst.

Beispiel 1: Vereinfachen von Abfragezeichenfolgen mit einer RewriteRule

In Webanwendungen werden häufig Abfragezeichenfolgen verwendet, die mit dem Fragezeichen ("? +") An eine URL angehängt und durch das kaufmännische Und (" & +") getrennt werden. Apache ignoriert diese beiden Zeichen beim Abgleichen der Umschreiberegeln. Manchmal sind jedoch Abfragezeichenfolgen erforderlich, um Daten zwischen Seiten zu übertragen. Die URL für eine in PHP geschriebene Suchergebnisseite könnte beispielsweise so aussehen:

http://example.com/results.php?item=shoes&type=women

Stattdessen möchten wir, dass unsere Besucher die folgende bereinigte URL verwenden können:

http://example.com/shoes/women

Wir können diese Ergebnisse auf zwei Arten erzielen - durch einen einfachen Austausch oder durch entsprechende Optionen.

  • Beispiel 1A: Einfacher Ersatz *

Wir erstellen eine Umschreiberegel, die eine einfache Ersetzung durchführt und eine lange Abfrage-URL vereinfacht:

/var/www/html/.htaccess

RewriteRule ^shoes/women$ results.php?item=shoes&type=women

Die Regel ordnet + Schuhe / Frauen` + Ergebnisse.php? Item = Schuhtyp = Frauen` zu.

  • Beispiel 1B: Übereinstimmungsoptionen *

In einigen Fällen möchten wir die Abfragezeichenfolge möglicherweise so verallgemeinern, dass sie verschiedene Arten von Schuhen enthält. Wir können dies erreichen, indem wir Folgendes tun:

  • Geben Sie mit der vertikalen Pipe "+ | +", dem booleschen "OR" -Operator, eine Reihe von Optionen an

  • Gruppieren Sie die Übereinstimmung mit + () + und referenzieren Sie die Gruppe mit der Variablen + $ 1 +, wobei + 1 + für die erste übereinstimmende Gruppe steht

Die Regel zum Umschreiben lautet nun:

/var/www/html/.htaccess

RewriteRule ^shoes/(men|women|youth) results.php?item=shoes&type=$1

Die oben gezeigte Regel stimmt mit einer URL von "+ shoes / +" überein, gefolgt von einem bestimmten Typ. Dadurch wird die ursprüngliche URL folgendermaßen geändert:

http://example.com/shoes/men

wird:

http://example.com/results.php?item=shoes&type=men

Diese Übereinstimmungsoption ermöglicht es Apache, mehrere Muster auszuwerten, ohne für jedes eine eigene Umschreiberegel erstellen zu müssen.

  • Beispiel 1C: Übereinstimmende Zeichensätze *

Wir möchten jedoch auch einen beliebigen Artikel angeben und ihn nicht auf "+ / shoes" beschränken. Also werden wir Folgendes tun:

  • Schreiben Sie einen regelmäßigen Ausdruck, der allen alphanumerischen Zeichen entspricht. Der Klammerausdruck + [] + stimmt mit einem beliebigen Zeichen darin überein, und der Ausdruck + stimmt mit einer beliebigen Anzahl von Zeichen überein, die in Klammern angegeben sind

  • Gruppieren Sie die Übereinstimmung und referenzieren Sie sie mit "+ $ 2 +" als zweite Variable in der Datei

/var/www/html/.htaccess

RewriteRule ^([A-Za-z0-9]+)/(men|women|youth) results.php?item=$1&type=$2

Das obige Beispiel konvertiert:

http://example.com/pants/men

to:

http://example.com/results.php?item=pants&type=men

Wir haben die Übereinstimmungsfunktion erfolgreich erweitert, um mehrere Aspekte einer URL einzuschließen.

  • Beispiel 1D: Übergeben von Abfragezeichenfolgen *

In diesem Abschnitt werden keine neuen Konzepte vorgestellt, sondern ein eventuell auftretendes Problem behandelt. Nehmen wir an, wir möchten im obigen Beispiel "+ http: // example.com / pants / men " umleiten, übergeben aber eine zusätzliche Abfragezeichenfolge "? Page = 2 +". Wir möchten die folgende URL zuordnen:

http://example.com/pants/men?page=2

to:

http://example.com/results.php?item=pants&type=men&page=2

Wenn Sie versuchen würden, mit unseren aktuellen Einstellungen auf die oben angegebene URL zuzugreifen, würde die Abfragezeichenfolge + page = 2 + verloren gehen. Dies lässt sich leicht mit einem zusätzlichen "+ QSA +" - Flag beheben, wodurch die Abfragezeichenfolgen kombiniert werden. Wenn Sie die Umschreiberegel so ändern, dass sie mit der folgenden übereinstimmt, wird das gewünschte Verhalten erzielt.

/var/www/html.html

RewriteRule ^([A-Za-z0-9]+)/(men|women|youth) results.php?item=$1&type=$2 [QSA]

Beispiel 2: Hinzufügen von Bedingungen mit Logik

Nun werden wir uns die Verwendung der Direktive "+ RewriteCond " ansehen. Wenn eine Umschreibebedingung als wahr ausgewertet wird, berücksichtigt Apache die darauf folgende ` RewriteRule +`.

  • Beispiel 2A: Standardseite *

Bisher hat Apache eine Anfrage nach einer ungültigen URL bearbeitet, indem eine 404 * Not Found * -Seite geliefert wurde. Anstelle einer Fehlerseite möchten wir jedoch, dass alle fehlerhaften URLs zurück zur Startseite geleitet werden. Anhand einer Bedingung können wir prüfen, ob die angeforderte Datei existiert.

/var/www/html/.htaccess

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^admin/(.*)$ /admin/home

Dies leitet so etwas wie "+ / admin / " zu " / admin / home +" um.

Zerlegen wir die obige Regel:

  • +% {REQUEST_FILENAME} + prüft die angeforderte Zeichenkette

  • +! - f + der Operator +! + oder * not * gibt an, dass, wenn der angeforderte Dateiname nicht vorhanden ist, die folgende Umschreiberegel ausgeführt wird.

  • + RewriteRule leitet die Anfragen zurück zu` + / admin / home + `

Das Definieren des 404 "+ ErrorDocument " würde bewährten Methoden folgen. Dazu erstellen wir eine " ErrorDocument " - Regel, um 404-Fehler auf eine " error.html +" - Seite zu verweisen:

/var/www/html/.htaccess

ErrorDocument 404 /error.html

Hiermit leiten Sie alle Anforderungen um, die zu einer HTTP 404-Antwort auf die Seite "+ error.html" führen.

  • Beispiel 2B: Einschränkung der IP-Adresse *

Ein + RewriteCond + kann verwendet werden, um den Zugriff auf eine Site über eine bestimmte IP-Adresse zu ermöglichen.

In diesem Beispiel wird der Datenverkehr von überall * außer * 198.51.100.24 blockiert.

/var/www/html/.htaccess

RewriteCond %{REMOTE_ADDR} !^(198\.51\.100\.24)$
RewriteRule (.*) - [F,L]

Die gesamte Regel besagt, dass der Zugriff nicht zulässig ist, wenn die IP-Adresse, die Ressourcen anfordert, nicht 198.51.100.24 lautet.

Zusamenfassend:

  • "+% ​​{REMOTE_ADDR} +" ist die Adresszeichenfolge

  • +! ^ (198 \ .51 \ .100 \ .24) $ + negiert die IP-Adresse. Die + \ + umgekehrten Schrägstriche verbergen sich vor dem +. + Punkt, da sie ansonsten als Metazeichen dienen, die für die Übereinstimmung mit einem beliebigen Zeichen verwendet werden.

  • Das "+ F " - Flag verbietet den Zugriff, und das " L +" - Flag zeigt an, dass dies die letzte Regel ist, die ausgeführt wird, wenn sie ausgeführt wird.

Wenn Sie den Zugriff von einer bestimmten Adresse aus * blockieren * möchten, verwenden Sie stattdessen Folgendes:

/var/www/html/.htaccess

RewriteCond %{REMOTE_ADDR} ^(198\.51\.100\.24)$
RewriteRule (.*) - [F,L]

Obwohl Sie andere Methoden verwenden können, um Datenverkehr zu Ihrer Site zu blockieren oder zuzulassen, ist das Einrichten der Einschränkung in einer "+ .htaccess +" - Datei der einfachste Weg, um diese Ergebnisse zu erzielen.

Fazit

In diesem Tutorial haben wir eine ".htaccess" -Datei verwendet, um mit den Direktiven "+ RewriteRule " und " RewriteCond " zu arbeiten. Es gibt viele Gründe, Umschreiberegeln zu verwenden, und die folgenden Ressourcen beschreiben die Funktionen des Moduls ` mod_rewrite +`:

Das + mod_rewrite + Modul ist eine entscheidende Komponente des Apache Webservers und Sie können viel damit anfangen. Die Dinge verlaufen jedoch nicht immer nach Plan, und wenn dies passiert, kann es vorkommen, dass Sie eine Umleitungsschleife oder einen mehrdeutigen "+500 Forbidden +" - Fehler haben. Tipps zum Debuggen solcher Situationen finden Sie unter this StackOverflow post.