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!