[[Vorlage(Getestet, general )]]
{{{#!vorlage Wissen
[:Terminal: Ein Terminal öffnen]
[:Editor: Einen Editor öffnen]
}}}
[[Inhaltsverzeichnis(1)]]
"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
{{{#!vorlage Befehl
sudo a2enmod rewrite
}}}
{{{#!vorlage Befehl
sudo a2enmod actions
}}}
Schließlich muss die Konfiguration von Apache wieder neu eingelesen werden
{{{#!vorlage Befehl
sudo apache2ctl force-reload
}}}
= Modul nutzen =
Üblicherweise wird die Rewrite-Bedingungen direkt über '''.htaccess'''-Dateien in den entsprechenden Verzeichnissen des Webservers festgelegt.
{{{#!code apache
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
{{{#!code apache
+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 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.
{{{#!code apache
ServerName example.com
...
RewriteEngine on
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
}}}
== Nur Verzeichnis auf auf HTTPS umleiten ==
Oftmals wird z.B. gewünscht, dass gewisse Seiten nur über [wikipedia.org:Hypertext_Transfer_Protocol_Secure: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:
{{{#!code apache
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
{{{#!code apache
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 =
* [http://httpd.apache.org/docs/2.4/mod/mod_rewrite.html Dokumentation zu Apache 2.4] {en} {fr}
* [http://httpd.apache.org/docs/2.4/rewrite/ Apache 2.4 Rewriting Guide] {en} {fr} - mit vielen typischen Beispielen
* [http://www.modrewrite.de/ Modrewrite.de] {de} - Infos, Anleitungen Tutorials und Hilfe zum Apache-Modul
* [selfhtmlwiki:Webserver/htaccess/Umleitungen_mit_mod_rewrite:Umleitungen mit mod_rewrite]
# tag: Internet, Netzwerk, Server, Apache