Website-Suche

So führen Sie eine interne Umleitung mit mod_rewrite in Apache durch


In diesem und im nächsten Artikel erklären wir, wie man mod_rewrite verwendet, um bestimmte HTTP-Anfragen anderen Seiten einer Website oder einer externen URL zuzuordnen.

Mit anderen Worten: Mit diesem bekannten Apache-Modul können Sie eine URL auf eine andere umleiten, was wir anhand praktischer Beispiele veranschaulichen.

Empfohlene Lektüre: 5 Tipps zur Steigerung der Leistung Ihres Apache-Webservers

HINWEIS: Bei den folgenden Beispielen wird davon ausgegangen, dass Sie zumindest einigermaßen mit Perl-kompatiblen regulären Ausdrücken (PCRE) vertraut sind. Da dieses Thema nicht Gegenstand dieses Artikels ist, finden Sie weitere Informationen zu PCRE in den Dokumenten zu Perl 5 Version 24.0.

Stellen Sie vor dem Fortfahren sicher, dass das Rewrite-Modul geladen ist. Obwohl dies das Standardverhalten in CentOS und ähnlichen Distributionen ist, müssen Sie es in Debian und Derivaten wie folgt manuell laden:

a2enmod rewrite

Konfigurieren von Apache für die Verwendung des mod_rewrite-Moduls

Der Einfachheit halber verwenden wir die Standard-Site in einer CentOS 7-Box (IP 192.168.0.100), um zu erklären, wie mod_rewrite verwendet wird ( DocumentRoot: /var/www/html, Konfigurationsdatei: /etc/httpd/conf/httpd.conf).

Damit Apache dieses Modul verwenden kann, fügen Sie der Konfigurationsdatei die folgende Zeile hinzu:

RewriteEngine on

Es ist wichtig zu beachten, dass diese Konfiguration nicht von virtuellen Hosts in derselben Box geerbt wird.

Daher müssen Sie RewriteEngine für jeden virtuellen Host hinzufügen, auf dem Sie Rewrite-Regeln verwenden möchten.

Interne Umleitung: Zuordnen einer URL zu einer anderen im selben virtuellen Host

Eine interne Umleitung ist das einfachste Beispiel für mod_rewrite. Wenn Sie alle Anforderungen für default.aspx an index.html umleiten möchten, fügen Sie unter RewriteEngine die folgende Zeile (auch als Rewrite-Regel bezeichnet) hinzu > am:

RewriteRule "^/default\.aspx$" "/index.html"

Und vergessen Sie nicht, Apache neu zu starten, damit die Änderungen wirksam werden.

Dies kann nützlich sein, wenn Ihre Website ursprünglich mit ASP entworfen und später auf einfaches HTML5 umgestellt wurde. Suchmaschinen werden die Datei .aspx indizieren, aber diese Datei existiert nicht mehr.

In diesem Fall müssen Sie eine Möglichkeit finden, die Anfrage umzuleiten, damit Ihre potenziellen Besucher nicht auf eine Fehlerseite stoßen. Zum Testen erstellen wir eine einfache HTML-Datei mit dem Namen index.html innerhalb von /var/www/html mit folgendem Inhalt:

<!DOCTYPE html>
<html>
  <head>
	<meta charset="utf-8">
	<title>New site</title>
  </head>
  <body>
	<h2>Default.aspx was here, but now it's index.html</h2>
  </body>
</html>

Die Zeichen Caret und Dollar bewirken, dass der reguläre Ausdruck mit jeder Zeichenfolge übereinstimmt, die mit /default beginnt und mit .aspx endet bzw.

Empfohlene Lektüre: Installieren Sie Mod_Pagespeed, um die Apache-Leistung um das Zehnfache zu beschleunigen

Starten Sie nun Ihren Browser und verweisen Sie auf 192.168.0.100/default.aspx. Wenn die Dinge wie erwartet verlaufen, sollte Apache stattdessen index.html bereitstellen.
Der Endbenutzer wird jedoch weiterhin default.aspx in der Adressleiste sehen, wodurch die Änderung völlig transparent ist:

Wenn Sie möchten, dass die URL in der Adressleiste anzeigt, dass der Server, den sie tatsächlich bedient, index.html und nicht eine Seite mit dem Namen default.aspx ist, fügen Sie [R, L] an das Ende der Rewrite-Regel wie folgt:

RewriteRule "^/default\.aspx$" "/index.html" [R,L]

Hier [R,L] sind zwei optionale Flags, die angeben, dass eine vollständige HTTP-Umleitung an den Browser ausgegeben werden soll (R) und dass keine weiteren Regeln verarbeitet werden sollen:

Beachten Sie, dass in der Adressleiste jetzt wie erwartet index.html und nicht wie zuvor default.aspx angezeigt wird.

Zusammenfassung

In diesem Artikel haben wir erklärt, wie man mod_rewrite verwendet, um eine interne Umleitung durchzuführen. Seien Sie gespannt auf den nächsten Beitrag, in dem wir erfahren, wie Sie zu einer Ressource umleiten, die auf einen anderen Server verschoben wurde, und wie Sie benutzerdefinierte Inhalte basierend auf dem Browser des Benutzers anzeigen. Bis dahin finden Sie in den Apache 2.4-Dokumenten eine vollständige Liste der verfügbaren Rewrite-Flags.

Wenn Sie Fragen oder Feedback zu diesem Artikel haben, können Sie wie immer gerne das Kommentarformular unten verwenden. Wir freuen uns von Ihnen zu hören!