Domainnamen mit RewriteRule anpassen

Mit der Anweisung RewriteRule des Apache Moduls rewrite_module können URLs regelbasiert umgeschrieben werden 1). RewriteRule besteht dabei aus einem Muster für den Request, der umgeschriebenen URL auf die weitergeleitet wird und optionalen Flags.

RewriteRule Muster URL [Flags]

Bevor Regeln mit RewriteRule verarbeitet werden können muss in der Konfigurationsdatei des Webservers oder einer .htaccess Datei mit RewriteEngine das Apache Modul aktiviert werden. Diese Anweisung muss dann in jeder verwendeten .htaccess Dateien einmal vorhanden sein.

RewriteEngine on
RewriteRule .* http://www.google.de

Für die Muster sind reguläre Ausdrücke verwendbar, so dass eine URL aus beliebig kombinierbaren Zeichen bestehen kann. Beispiele für die Verwendung von RewriteRule sind Weiterleitungen veralteter Seiten und das Einfügen oder Ersetzen von Namensbestandteilen einer Seite.

Zum Beispiel kann auf eine aktuellere Seite oder ein anderes Verzeichnis weiter geleitet werden. Der Nutzer bekommt hiervon nichts mit und muss sich um die interne Verzeichnisstruktur nicht kümmen. Die im Browser sichtbare URL wird sich für den Nutzer auch nach einer Umschreibung nicht ändern.

RewriteEngine on
RewriteRule /data/old.html /data/new.html [L]

Im Beispiel liegt eine .htaccess Datei im Ordner /data und scheibt die URL /data/old.html in /data/new.html um.

Solange auf die Ressource auf auch zugegriffen werden kann ist jede URL beliebig veränderbar. Hierzu können reguläre Ausdrücke mit einem Muster verwendet werden, dass zwischen einem Zirkumflex und einem Dollarzeichen stehen muss.

RewriteEngine on
RewriteRule ^(.*).html$ data/$1.php [L,R=301]

Zwischen ^ und $ wird das Muster definiert. Mit dem in Klammern stehenden regulären Ausdruck (.*) kann eine Variable $1 erstellt und für einen Zielpfad verwendet werden. Im Beispiel wird die Dateiendung html durch php ersetzt.

Um Regeln auch an Bedingungen knüpfen zu können wird die Anweisung RewriteCond verwendet. RewriteCond besteht aus zwei Parametern, die auf eine Übereinstimmung geprüft werden. Parameter können sowohl normaler Text als auch Servervariablen sein. Nur bei einer Übereinstimmung wird die nachfolgende RewriteRule Anweisung auch ausgeführt.

So kann beispielsweise überprüft werden, ob eine bestimmte Ressource abgefragt wird.

RewriteCond %{REQUEST_URI} =/old/index.html
RewriteRule .* /new/index.php [L,R=301]

Wenn es sich bei der angefragten Ressource um /old/index.html handelt wird die URL auf /new/index.php umgeschrieben.

Ein häufige Anwendung von RewriteCond ist das Umschreiben der eigentlichen Domain-URL. Falls beispielsweise eine Seite bereits SSL nutzt braucht es keinen Zugang zur HTTP-Seite auf Port 80 mehr, so dass eine URL stets auf HTTPS umgeleitet werden kann. Das Umschreiben hierzu sollte dann global in der Konfigurationsdatei des Webservers erfolgen und nicht in einer htaccess Datei.

<VirtualHost *:80>
...
RewriteEngine on
RewriteCond %{SERVER_NAME} =subdomain.domain.de [OR]
RewriteCond %{SERVER_NAME} =www.subdomain.domain.de
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [L,R=302]
...
</VirtualHost>

<< Neuere Einträge | Ältere Einträge >>