mod rewrite
Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:
Dieser Artikel ist größtenteils für alle Ubuntu-Versionen gültig.
Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:
"mod_rewrite" ist ein Apache-Modul, um URLs zu manipulieren. Mit der RewriteEngine des Apache 2.4 Webservers ist es möglich, die angeforderte URL anhand von Regeln "umzuschreiben" (auf englisch: to rewrite). Basierend auf einem Parser für Reguläre Ausdrücke kann die angeforderte URL manipuliert werden. Das Modul ist unter Ubuntu in der Apache 2 Installation bereits vorhanden und muss nicht separat installiert werden.
mod_rewrite¶
Als erstes muss das Modul aktiviert werden
sudo a2enmod rewrite
sudo a2enmod actions
Schließlich muss die Konfiguration von Apache wieder neu eingelesen werden
sudo apache2ctl force-reload
Modul nutzen¶
Üblicherweise wird die Rewrite-Bedingungen direkt über .htaccess-Dateien in den entsprechenden Verzeichnissen des Webservers festgelegt.
1 2 | RewriteEngine on RewriteCond ... |
Um das Modul in .htaccess-Dateien zu aktivieren, muss meist noch im Verzeichnis /etc/apache2/sites-enabled/ die Datei 000-default angepasst werden. Dazu muss die Datei in einem Editor mit Root-Rechten geöffnet werden [2]:
Anschließend muss die letzte Zeile in dieser Passage
1 2 3 | <Directory /var/www/> +Options +Indexes +FollowSymLinks +MultiViews AllowOverride None |
geändert werden. Um das Umschreiben von URLs zu erlauben, muss das None
durch FileInfo
ersetzt werden. Andere mögliche Werte können in der Dokumentation nachgelesen werden (siehe Links am Ende des Artikels).
Beispiele¶
Alles auf HTTPS umleiten¶
Mit folgenden Zeilen innerhalb eines Virtual Hosts für Port 80 werden alle Anfragen permanent auf ihre https://
-Äquivalente umgeleitet. Permanente Weiterleitungen werden von Browser gemerkt, was in diesem Fall erwünscht ist.
1 2 3 4 5 6 | <VirtualHost *:80> ServerName example.com ... RewriteEngine on RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent] </VirtualHost> |
Nur Verzeichnis auf auf HTTPS umleiten¶
Oftmals wird z.B. gewünscht, dass gewisse Seiten nur über https erreicht werden können. Im folgenden ein Beispiel für eine "Teil-Umleitung"
In der Datei /etc/apache2/sites-available/default müssen dafür z.B. die Zeilen:
1 2 3 4 | RewriteEngine on RewriteRule ^/webmail(.*)$ https://%{SERVER_NAME}/webmail$1 [L,R] RewriteLog "/var/log/apache2/rewrite.log" RewriteLogLevel 2 |
hinzugefügt [2] werden. Hier würde http://domain.tld/webmail
automatisch auf https://domain.tld/webmail
umgeleitet werden.
IP-Bereiche aussperren¶
Über die Regel
1 2 3 | RewriteEngine on RewriteCond %{REMOTE_ADDR} ^123.456.789. RewriteRule ^.* - [F] |
könnte man z.B. einen kompletten IP-Bereich wie 123.456.789.*
komplett aussperren. Mit RewriteCond definieren wir die Bedingung( Es sind mehre möglich diese werden mit [OR] verknüpft) unter der die RewriteRule gilt.
Links¶
Apache 2.4 Rewriting Guide 🇬🇧 🇫🇷 - mit vielen typischen Beispielen
Modrewrite.de 🇩🇪 - Infos, Anleitungen Tutorials und Hilfe zum Apache-Modul