Mod rewrite/Anwendung: Unterschied zwischen den Versionen
Keine Bearbeitungszusammenfassung |
|||
| Zeile 2: | Zeile 2: | ||
=== Beschreibung === | === Beschreibung === | ||
mod_rewrite sollte in jeder Apache-Installation verfügbar sein | mod_rewrite sollte in jeder Apache-Installation verfügbar sein | ||
* Rewrite-Regeln können einer .htaccess-Datei im Website-Root oder in der Apache-vhost-Datei hinzugefügt werden | * Rewrite-Regeln können einer .htaccess-Datei im Website-Root oder in der Apache-vhost-Datei hinzugefügt werden | ||
=== URL in der Adressleiste beibehalten === | === URL in der Adressleiste beibehalten === | ||
| Zeile 11: | Zeile 11: | ||
RewriteRule ^/(.*)$ /sub/$1 [P,L] | RewriteRule ^/(.*)$ /sub/$1 [P,L] | ||
Wenn Sie die Subdomain in der Browserleiste behalten möchten, müssen Sie ein [P]-Tag (für Proxy) hinzufügen | Wenn Sie die Subdomain in der Browserleiste behalten möchten, müssen Sie ein [P]-Tag (für Proxy) hinzufügen | ||
RewriteEngine on RewriteCond %{HTTP_HOST} ^sub.domain.tld [NC] RewriteRule ^/(.*)$ /sub/$1 [P,L] | RewriteEngine on RewriteCond %{HTTP_HOST} ^sub.domain.tld [NC] RewriteRule ^/(.*)$ /sub/$1 [P,L] | ||
| Zeile 20: | Zeile 20: | ||
=== Standard-Domain definieren === | === Standard-Domain definieren === | ||
Der folgende Code definiert eine Standarddomain, d. h. wenn z.B. eine Domain ohne „www.“ eingegeben wird, dass der User automatisch auf www.domain.com weitergeleitet wird | Der folgende Code definiert eine Standarddomain, d. h. wenn z.B. eine Domain ohne „www.“ eingegeben wird, dass der User automatisch auf www.domain.com weitergeleitet wird | ||
* Dieser Code kann auch bei der Verwendung mehrer Domains verwendet werden, damit alle Aufrufe auf eine defininierte Standarddomain geleitet werden | * Dieser Code kann auch bei der Verwendung mehrer Domains verwendet werden, damit alle Aufrufe auf eine defininierte Standarddomain geleitet werden | ||
* Dies ist nicht nur aus suchmaschinentechnischer Sicht von Vorteil (Stichwort Duplicate Content) | * Dies ist nicht nur aus suchmaschinentechnischer Sicht von Vorteil (Stichwort Duplicate Content) | ||
Der nachstehende Code bedeuet in etwa folgendes: „Wenn die aufgerufene Domain nicht www.domain.com ist, dann leite den User auf die Domain www.domain.com weiter“ | Der nachstehende Code bedeuet in etwa folgendes: „Wenn die aufgerufene Domain nicht www.domain.com ist, dann leite den User auf die Domain www.domain.com weiter“ | ||
* Gleichzeitig werden alle URI’s mit übergeben | * Gleichzeitig werden alle URI’s mit übergeben | ||
* D. h, wenn ein User www.irgendwas.com/seitexy.html aufruft, wird er automatisch auf die Seite www.domain.com/seitexy.html umgeleitet | * D. h, wenn ein User www.irgendwas.com/seitexy.html aufruft, wird er automatisch auf die Seite www.domain.com/seitexy.html umgeleitet | ||
RewriteEngine On RewriteCond %{HTTP_HOST} !^www.domain.com$ RewriteRule ^(.*)$ www.domain.com/$1 [L,R=301] | RewriteEngine On RewriteCond %{HTTP_HOST} !^www.domain.com$ RewriteRule ^(.*)$ www.domain.com/$1 [L,R=301] | ||
| Zeile 34: | Zeile 34: | ||
=== Einzelne Seiten per 301 umleiten: === | === Einzelne Seiten per 301 umleiten: === | ||
Mit den nachfolgenden Code können einzelnen Seiten ganz einfach umgeleitet werden | Mit den nachfolgenden Code können einzelnen Seiten ganz einfach umgeleitet werden | ||
RewriteEngine On RewriteRule ^alteseite.html$ /neueseite.html [R=301,L] | RewriteEngine On RewriteRule ^alteseite.html$ /neueseite.html [R=301,L] | ||
oder wenn auf eine neue Domainunterseite geleitet werden soll | oder wenn auf eine neue Domainunterseite geleitet werden soll | ||
RewriteEngine On RewriteRule ^alteseite.html$ www.neuedomain.at/neueseite.html [R=301,L] | RewriteEngine On RewriteRule ^alteseite.html$ www.neuedomain.at/neueseite.html [R=301,L] | ||
=== aus dynamischer URL statische machen === | === aus dynamischer URL statische machen === | ||
Aus folgender URL: www.domain.at/pro_detail.php soll in eine html umgewandelt werden: www.domain.at/pro_detail-1.html – wobei die 1 die variable ist | Aus folgender URL: www.domain.at/pro_detail.php soll in eine html umgewandelt werden: www.domain.at/pro_detail-1.html – wobei die 1 die variable ist | ||
RewriteEngine On RewriteRule (.*)_(.*).html$ /pro_detail.php?url_isbn=$1 [qsappend,L] | RewriteEngine On RewriteRule (.*)_(.*).html$ /pro_detail.php?url_isbn=$1 [qsappend,L] | ||
=== aus dynamischer URL statische machen – wobei als Parameter der Title genommen wird === | === aus dynamischer URL statische machen – wobei als Parameter der Title genommen wird === | ||
Hier werden dynamische Urls in statische ausgeben, wobei die URL-Umschreibung nicht anhand einer ID, sondern des Titles der Seite genommen wird | Hier werden dynamische Urls in statische ausgeben, wobei die URL-Umschreibung nicht anhand einer ID, sondern des Titles der Seite genommen wird | ||
* So kann man statt einer Zahl in der URL ein Keyword platzieren | * So kann man statt einer Zahl in der URL ein Keyword platzieren | ||
* Beispiel: aus www.domain.at/pro_detail.php soll www.domain.at/pro_detail-title.html werden | * Beispiel: aus www.domain.at/pro_detail.php soll www.domain.at/pro_detail-title.html werden | ||
RewriteEngine On RewriteRule ^([^.]+).html$ /pro_detail.php?url_title=$1 [L] | RewriteEngine On RewriteRule ^([^.]+).html$ /pro_detail.php?url_title=$1 [L] | ||
=== Bestimmten Teil einer URI ersetzen === | === Bestimmten Teil einer URI ersetzen === | ||
Unter Umständen möchte man nach Umstellung einer Webseite eine Ordnerbezeichnung in der URL automatisch umleiten, da auf diesen Ordner zahlreiche Backlinks laufen und man diese nicht ändern möchte oder kann | Unter Umständen möchte man nach Umstellung einer Webseite eine Ordnerbezeichnung in der URL automatisch umleiten, da auf diesen Ordner zahlreiche Backlinks laufen und man diese nicht ändern möchte oder kann | ||
* Beispiel: In der URL kommt „ordner-alt“ vor und diese Zeichen sollen durch „ordner-neu“ ausgetauscht werden | * Beispiel: In der URL kommt „ordner-alt“ vor und diese Zeichen sollen durch „ordner-neu“ ausgetauscht werden | ||
RewriteEngine On RewriteRule ^(.*)ordner-alt([^0-9]*)$ /$1ordner-neu$2 [R=301,L] | RewriteEngine On RewriteRule ^(.*)ordner-alt([^0-9]*)$ /$1ordner-neu$2 [R=301,L] | ||
=== Bestimmten Teil einer URI ersetzen – Variante 2 === | === Bestimmten Teil einer URI ersetzen – Variante 2 === | ||
Mit nachstehendem Code kann man Seiten umleiten, die einen bestimmten Begriff in der URL aufweisen | Mit nachstehendem Code kann man Seiten umleiten, die einen bestimmten Begriff in der URL aufweisen | ||
* Z.B. aus www.domain.at/ordner/hotel-wohnen.html soll www.domain-abc.at/hotel-wohnen.html werden, Seiten wie www.domain.at/ordner/wird-nicht-umgeleitet.html werden nicht umgeleitet | * Z.B. aus www.domain.at/ordner/hotel-wohnen.html soll www.domain-abc.at/hotel-wohnen.html werden, Seiten wie www.domain.at/ordner/wird-nicht-umgeleitet.html werden nicht umgeleitet | ||
* Hier wird einfach nach dem Wort „hotel“ in der URI gesucht, wenn dieses Wort vorkommt, wird auf die Domain www.domain-abc.at umgeleitet | * Hier wird einfach nach dem Wort „hotel“ in der URI gesucht, wenn dieses Wort vorkommt, wird auf die Domain www.domain-abc.at umgeleitet | ||
RewriteEngine On RewriteRule ^(.*)hotel(.*)$ www.domain-abc.at/$1hotel$2 [R=301,L] | RewriteEngine On RewriteRule ^(.*)hotel(.*)$ www.domain-abc.at/$1hotel$2 [R=301,L] | ||
=== Bestimmten Teil einer URI mit Bedingung ersetzen – Variante 3 === | === Bestimmten Teil einer URI mit Bedingung ersetzen – Variante 3 === | ||
Mit nachstehendem Code werden ebenfalls bestimmte Teile der URI abgefragt und umgeleitet | Mit nachstehendem Code werden ebenfalls bestimmte Teile der URI abgefragt und umgeleitet | ||
* Beispiel: Ihre URI hat einen Parameter über das Layout drin | * Beispiel: Ihre URI hat einen Parameter über das Layout drin | ||
* Dadurch können aber die unterschiedlichen Seiten mit eigentlich gleichem Inhalt unter verschiedenen Layouts und somit unterschiedlichen URL’s abrufbar sein | * Dadurch können aber die unterschiedlichen Seiten mit eigentlich gleichem Inhalt unter verschiedenen Layouts und somit unterschiedlichen URL’s abrufbar sein | ||
* Der nachstehende Code macht folgendes: /wien/layoutseppi,irgendwas,alfred/aschenbecher/aschenbecher.htmImmer dann, wenn die fett markierten Teile der URL nicht identisch sind, dann wird schwarz durch rot ersetzt | * Der nachstehende Code macht folgendes: /wien/layoutseppi,irgendwas,alfred/aschenbecher/aschenbecher.htmImmer dann, wenn die fett markierten Teile der URL nicht identisch sind, dann wird schwarz durch rot ersetzt | ||
RewriteEngine On RewriteCond $2<>$3 !^(.+)<>1 RewriteRule ^(.+/layout)([^,]+),irgendwas,([^,/]+)(/.+.htm)$ /$1$3,irgendwas,$3$4 [R=301,L] | RewriteEngine On RewriteCond $2<>$3 !^(.+)<>1 RewriteRule ^(.+/layout)([^,]+),irgendwas,([^,/]+)(/.+.htm)$ /$1$3,irgendwas,$3$4 [R=301,L] | ||
=== Rootseite per 301 auf Unterseite weiterleiten === | === Rootseite per 301 auf Unterseite weiterleiten === | ||
Hier eine saubere Lösung, um die Rootseite auf eine Unterseite weiterzuleiten | Hier eine saubere Lösung, um die Rootseite auf eine Unterseite weiterzuleiten | ||
RewriteEngine On RewriteRule ^$ /unterseite.html [R=301,L] | RewriteEngine On RewriteRule ^$ /unterseite.html [R=301,L] | ||
=== PHP-Seiten bei Aufruf auf .html umleiten === | === PHP-Seiten bei Aufruf auf .html umleiten === | ||
Sie haben Ihre Seiten in PHP geschrieben, möchten aber die Ausgabe der Seiten als .html machen | Sie haben Ihre Seiten in PHP geschrieben, möchten aber die Ausgabe der Seiten als .html machen | ||
* Um zu verhindern, dass die Seite unter irgendwas.php und irgendwas.html erreichbar ist, kann man mit folgendem Code den Aufruf der irgendwas.php auf die irgendwas.html umleiten | * Um zu verhindern, dass die Seite unter irgendwas.php und irgendwas.html erreichbar ist, kann man mit folgendem Code den Aufruf der irgendwas.php auf die irgendwas.html umleiten | ||
RewriteEngine On RewriteRule ^([^.]+).html$ /$1.php?rw=1 [QSA,L] RewriteCond %{QUERY_STRING} !^rw=1 RewriteRule ^([^.]+).php$ /$1.html [R=301,L] | RewriteEngine On RewriteRule ^([^.]+).html$ /$1.php?rw=1 [QSA,L] RewriteCond %{QUERY_STRING} !^rw=1 RewriteRule ^([^.]+).php$ /$1.html [R=301,L] | ||
=== Dynamische URL umleiten === | === Dynamische URL umleiten === | ||
Aus www.domain.de/index.php soll www.domain.de/index.php werden | Aus www.domain.de/index.php soll www.domain.de/index.php werden | ||
RewriteEngine On RewriteCond %{QUERY_STRING} ^content=hp_service$ RewriteRule ^index.php$ /index.php? [R=301,L] | RewriteEngine On RewriteCond %{QUERY_STRING} ^content=hp_service$ RewriteRule ^index.php$ /index.php? [R=301,L] | ||
=== Dynamische URL umleiten Variante 2 === | === Dynamische URL umleiten Variante 2 === | ||
Wenn z.B. alte dynamische URL’s in einem Unterordner (hier „cms“) liegen und dieser Ordner nicht mehr existiert, aber noch ein paar Links drauf zeigen, kann man alle dynamischen URL’s einfach auf die Root-Seite (oder irgendeine andere Seite) leiten | Wenn z.B. alte dynamische URL’s in einem Unterordner (hier „cms“) liegen und dieser Ordner nicht mehr existiert, aber noch ein paar Links drauf zeigen, kann man alle dynamischen URL’s einfach auf die Root-Seite (oder irgendeine andere Seite) leiten | ||
* Alle Seiten wie www.domain.de/cms/index.php= blabla&id=1&Itemid=2 sollen auf www.domain.de geleitet werden | * Alle Seiten wie www.domain.de/cms/index.php= blabla&id=1&Itemid=2 sollen auf www.domain.de geleitet werden | ||
RewriteEngine On RewriteCond %{QUERY_STRING} ^option=com_content([^]+]+)$ RewriteRule ^index.php$ /? [L,R=301] | RewriteEngine On RewriteCond %{QUERY_STRING} ^option=com_content([^]+]+)$ RewriteRule ^index.php$ /? [L,R=301] | ||
=== Dynamische URL umleiten Variante 3 === | === Dynamische URL umleiten Variante 3 === | ||
Aus product_info.php?products_id=irgendwas soll www.domain.at/seite-irgendwas.html werden | Aus product_info.php?products_id=irgendwas soll www.domain.at/seite-irgendwas.html werden | ||
RewriteEngine On RewriteCond %{QUERY_STRING} ^products_id=([0-9]+)$ RewriteRule ^(.*) www.domain.at/seite-%1.html? [L,R=301] | RewriteEngine On RewriteCond %{QUERY_STRING} ^products_id=([0-9]+)$ RewriteRule ^(.*) www.domain.at/seite-%1.html? [L,R=301] | ||
=== Dynamische URL umleiten Variante 4 === | === Dynamische URL umleiten Variante 4 === | ||
Aus product_info.php?products_id=3197 soll www.domain.at/datei.html werden | Aus product_info.php?products_id=3197 soll www.domain.at/datei.html werden | ||
RewriteEngine On RewriteCond %{QUERY_STRING} ^products_id=([0-9]+) RewriteRule ^(.*)$ www.domain.at/datei.html? [R=301,L] | RewriteEngine On RewriteCond %{QUERY_STRING} ^products_id=([0-9]+) RewriteRule ^(.*)$ www.domain.at/datei.html? [R=301,L] | ||
Wenn sich aus der Product_ID der Dateiname für die Detailseite erfassen lässt (product_id=123 -> neue Seite 123.html), könnte man „datei.html“ durch „%1.html“ ersetzen | Wenn sich aus der Product_ID der Dateiname für die Detailseite erfassen lässt (product_id=123 -> neue Seite 123.html), könnte man „datei.html“ durch „%1.html“ ersetzen | ||
* Durch das „?“ am Ende von datei.html wird verhindert, dass der Query_String weiter übergeben wird, sonst würde er auf datei.html?products_id=3197 umleiten, so wird auf datei.html geleitet | * Durch das „?“ am Ende von datei.html wird verhindert, dass der Query_String weiter übergeben wird, sonst würde er auf datei.html?products_id=3197 umleiten, so wird auf datei.html geleitet | ||
=== Dynamische URL umleiten Variante 5 === | === Dynamische URL umleiten Variante 5 === | ||
Aus seite.php?id=1234 soll www.domain.at/seite-1234.html werden, gleichzeitig soll bei Aufruf der dynamischen Seite seite.php?id=1234 diese auf seite-1234.html per 301 umgeleitet werden | Aus seite.php?id=1234 soll www.domain.at/seite-1234.html werden, gleichzeitig soll bei Aufruf der dynamischen Seite seite.php?id=1234 diese auf seite-1234.html per 301 umgeleitet werden | ||
RewriteEngine On RewriteCond %{QUERY_STRING} ^id=([0-9]+)$ RewriteRule ^(.*) www.domain.at/seite-%1.html? [L,R=301] RewriteRule ^artikel([0-9]+).html$ /seite.php?id=$1&umgeleitet=ja | RewriteEngine On RewriteCond %{QUERY_STRING} ^id=([0-9]+)$ RewriteRule ^(.*) www.domain.at/seite-%1.html? [L,R=301] RewriteRule ^artikel([0-9]+).html$ /seite.php?id=$1&umgeleitet=ja | ||
Um eine Endlosschleife zu vermeiden, wird an die interne RewriteRule einfach „&umgleitet=ja“ dran gehängt | Um eine Endlosschleife zu vermeiden, wird an die interne RewriteRule einfach „&umgleitet=ja“ dran gehängt | ||
=== Dynamische URL umleiten Variante 6 === | === Dynamische URL umleiten Variante 6 === | ||
Aus domain.de/?rubrik:keyword_Keyword2 soll domain.de/rubrik-keyword-Keyword2 werden (beide Richtungen) | Aus domain.de/?rubrik:keyword_Keyword2 soll domain.de/rubrik-keyword-Keyword2 werden (beide Richtungen) | ||
RewriteEngine On RewriteCond %{QUERY_STRING} ^([A-Za-z]+)$ RewriteRule ^index.php$ www.domain.de/%1? [R=301] RewriteRule ^([A-Za-z]+)$ /index.php?$1&umgeleitet=ja RewriteCond %{QUERY_STRING} ^([A-Za-z]+):([A-Za-z]+)$ RewriteRule ^index.php$ www.domain.de/%1-%2? [R=301] RewriteRule ^([A-Za-z]+)-([A-Za-z]+)$ /index.php?$1:$2&umgeleitet=ja RewriteCond %{QUERY_STRING} ^([A-Za-z]+):([A-Za-z]+)_([A-Za-z]+)$ RewriteRule ^index.php$ www.domain.de/%1-%2-%3? [R=301] RewriteRule ^([A-Za-z]+)-([A-Za-z]+)-([A-Za-z]+)$ /index.php?$1:$2_$3&umgeleitet=ja | RewriteEngine On RewriteCond %{QUERY_STRING} ^([A-Za-z]+)$ RewriteRule ^index.php$ www.domain.de/%1? [R=301] RewriteRule ^([A-Za-z]+)$ /index.php?$1&umgeleitet=ja RewriteCond %{QUERY_STRING} ^([A-Za-z]+):([A-Za-z]+)$ RewriteRule ^index.php$ www.domain.de/%1-%2? [R=301] RewriteRule ^([A-Za-z]+)-([A-Za-z]+)$ /index.php?$1:$2&umgeleitet=ja RewriteCond %{QUERY_STRING} ^([A-Za-z]+):([A-Za-z]+)_([A-Za-z]+)$ RewriteRule ^index.php$ www.domain.de/%1-%2-%3? [R=301] RewriteRule ^([A-Za-z]+)-([A-Za-z]+)-([A-Za-z]+)$ /index.php?$1:$2_$3&umgeleitet=ja | ||
=== Mehrere Seiten auf eine Zielseite leiten === | === Mehrere Seiten auf eine Zielseite leiten === | ||
Wenn eine Seite unter verschiedenen URL’s erreichbar ist, kann man diese wie folgt auf eine Zielseite umleiten | Wenn eine Seite unter verschiedenen URL’s erreichbar ist, kann man diese wie folgt auf eine Zielseite umleiten | ||
<tt>RewriteEngine On RewriteRule ^verzeichnis/seite1.htm$|^unterseite23.htm$| ^verzeichnisneu/verzeichnis2/seite5.htm$ /zielseite.htm [R=301,L]</tt> | <tt>RewriteEngine On RewriteRule ^verzeichnis/seite1.htm$|^unterseite23.htm$| ^verzeichnisneu/verzeichnis2/seite5.htm$ /zielseite.htm [R=301,L]</tt> | ||
=== Einen Ordner simulieren und Dateiaufrufen automatisch per 301 auf diesen Ordner leiten === | === Einen Ordner simulieren und Dateiaufrufen automatisch per 301 auf diesen Ordner leiten === | ||
Beispiel: Sie haben eine Datei im Rootordner liegen und möchten wegen der Optik einen Unterordner simulieren | Beispiel: Sie haben eine Datei im Rootordner liegen und möchten wegen der Optik einen Unterordner simulieren | ||
* Die Datei im Rootverzeichnis lautet „martin.php“, diese soll aber beim Aufrufen auf /weymayer/martin/ weitergeleitet werden | * Die Datei im Rootverzeichnis lautet „martin.php“, diese soll aber beim Aufrufen auf /weymayer/martin/ weitergeleitet werden | ||
* Gleichzeitig soll aber beim Aufruf der Seite /weymayer/martin/ der Inhalt der der Seite martin.php angezeigt werden | * Gleichzeitig soll aber beim Aufruf der Seite /weymayer/martin/ der Inhalt der der Seite martin.php angezeigt werden | ||
RewriteEngine On RewriteRule ^weymayer/([^.]+)/$ $1.php?rw=1 [QSA,L] RewriteCond %{QUERY_STRING} !^rw=1 RewriteRule ^martin.php$ /weymayer/martin/$1 [R=301,L] | RewriteEngine On RewriteRule ^weymayer/([^.]+)/$ $1.php?rw=1 [QSA,L] RewriteCond %{QUERY_STRING} !^rw=1 RewriteRule ^martin.php$ /weymayer/martin/$1 [R=301,L] | ||
Beispiel 2: Es sollen alle .php Dateien im Root-Ordner umgeleitet werden | Beispiel 2: Es sollen alle .php Dateien im Root-Ordner umgeleitet werden | ||
RewriteEngine On RewriteRule ^weymayer/([^.]+)/$ $1.php?rw=1 [QSA,L] RewriteCond %{QUERY_STRING} !^rw=1 RewriteRule ^([^.]+).php$ /weymayer/$1/ [R=301,L] | RewriteEngine On RewriteRule ^weymayer/([^.]+)/$ $1.php?rw=1 [QSA,L] RewriteCond %{QUERY_STRING} !^rw=1 RewriteRule ^([^.]+).php$ /weymayer/$1/ [R=301,L] | ||
=== Dateien mit einer bestimmten Endung (.html, .php) auf simulierten Ordner umleiten === | === Dateien mit einer bestimmten Endung (.html, .php) auf simulierten Ordner umleiten === | ||
Beispiel: aus einer .html Datei in einem Unterordner soll die Endung .html entfernt bzw. auf den Unterordner geleitet werden (aus autos/audi.html soll autos/audi/ werden) | Beispiel: aus einer .html Datei in einem Unterordner soll die Endung .html entfernt bzw. auf den Unterordner geleitet werden (aus autos/audi.html soll autos/audi/ werden) | ||
* Dateien mit der gleichen Endung (.html) im Rootverzeichnis sollen aber von dieser Regel ausgeschlossen sein | * Dateien mit der gleichen Endung (.html) im Rootverzeichnis sollen aber von dieser Regel ausgeschlossen sein | ||
RewriteEngine On RewriteRule ^(.*)/([^.]+)/$ /$1/$2.html?rw=1 [QSA,L] RewriteCond %{QUERY_STRING} !^rw=1 RewriteRule ^(.*)/([^.]+).html$ /$1/$2/ [R=301,L] | RewriteEngine On RewriteRule ^(.*)/([^.]+)/$ /$1/$2.html?rw=1 [QSA,L] RewriteCond %{QUERY_STRING} !^rw=1 RewriteRule ^(.*)/([^.]+).html$ /$1/$2/ [R=301,L] | ||
=== Auf der Startseite (Root-Seite) den Inhalt einer bestimmten Unterseite anzeigen lassen === | === Auf der Startseite (Root-Seite) den Inhalt einer bestimmten Unterseite anzeigen lassen === | ||
Manchmal wird die Root-Index Seite auf irgendeine Unterseite weitergeleitet | Manchmal wird die Root-Index Seite auf irgendeine Unterseite weitergeleitet | ||
* Das kann man mit mod_rewrite auch umgehen | * Das kann man mit mod_rewrite auch umgehen | ||
* Beispiel: Sie möchten bei Aufruf der Domain www.domain.at die Unterseite www.domain.at/cmsordner/startseite.html anzeigen lassen | * Beispiel: Sie möchten bei Aufruf der Domain www.domain.at die Unterseite www.domain.at/cmsordner/startseite.html anzeigen lassen | ||
* Jedoch ist ein Redirect nicht optimal, da im Browser dann die Unterseite aufscheint | * Jedoch ist ein Redirect nicht optimal, da im Browser dann die Unterseite aufscheint | ||
* Besser ist es, wenn die Unterseite in die Index der Root-Seite einbezogen werden | * Besser ist es, wenn die Unterseite in die Index der Root-Seite einbezogen werden | ||
* Dazu muss man zuerst eine Datei im Root-Ordner anlegen, die „index.htm“ heißt (die Datei kann völlig leer sein) | * Dazu muss man zuerst eine Datei im Root-Ordner anlegen, die „index.htm“ heißt (die Datei kann völlig leer sein) | ||
* In die .htacces kommt folgender Code | * In die .htacces kommt folgender Code | ||
RewriteEngine On RewriteRule index.htm$ cmsordner/startseite.html?rw=1 [QSA,L] RewriteCond %{QUERY_STRING} !^rw=1 RewriteRule ^cmsordner/startseite.html$ /$1 [R=301,L] | RewriteEngine On RewriteRule index.htm$ cmsordner/startseite.html?rw=1 [QSA,L] RewriteCond %{QUERY_STRING} !^rw=1 RewriteRule ^cmsordner/startseite.html$ /$1 [R=301,L] | ||
=== index.php beim Aufruf auf Rootseite / leiten === | === index.php beim Aufruf auf Rootseite / leiten === | ||
Manche CMS und Onlineshopsysteme geben automatisch oft die Startseite als index.php aus | Manche CMS und Onlineshopsysteme geben automatisch oft die Startseite als index.php aus | ||
* Dies ist aber nicht gewünscht, da die Seite ja grundsätzlich unter www.domain.at/ erreichbar ist und alles andere unter Umständen als Duplicate Content gewertet werden kann | * Dies ist aber nicht gewünscht, da die Seite ja grundsätzlich unter www.domain.at/ erreichbar ist und alles andere unter Umständen als Duplicate Content gewertet werden kann | ||
* Zudem kommt hinzu, dass interne Linkpower auf zwei Seiten (Rootseite und index.php) verteilt wird | * Zudem kommt hinzu, dass interne Linkpower auf zwei Seiten (Rootseite und index.php) verteilt wird | ||
RewriteEngine On RewriteCond %{THE_REQUEST} ^[A-Z]{3,9} /index.php HTTP/ RewriteRule ^index.php$ %{HTTP_HOST} [R=301,L,NC] | RewriteEngine On RewriteCond %{THE_REQUEST} ^[A-Z]{3,9} /index.php HTTP/ RewriteRule ^index.php$ %{HTTP_HOST} [R=301,L,NC] | ||
oder Variante 2 | oder Variante 2 | ||
RewriteEngine On RewriteRule ^index.(php|html)$ www.domain.de [R=301,L] | RewriteEngine On RewriteRule ^index.(php|html)$ www.domain.de [R=301,L] | ||
Version vom 5. März 2025, 12:34 Uhr
mod_rewrite/Anwendung
Beschreibung
mod_rewrite sollte in jeder Apache-Installation verfügbar sein
- Rewrite-Regeln können einer .htaccess-Datei im Website-Root oder in der Apache-vhost-Datei hinzugefügt werden
URL in der Adressleiste beibehalten
sub.domain.tld in ein Unterverzeichnis der Website umleiten und die ursprüngliche URL in der Adressleiste des Browsers beibehalten
RewriteEngine on
RewriteCond %{HTTP_HOST} ^sub.domain.tld [NC]
RewriteRule ^/(.*)$ /sub/$1 [P,L]
Wenn Sie die Subdomain in der Browserleiste behalten möchten, müssen Sie ein [P]-Tag (für Proxy) hinzufügen
RewriteEngine on RewriteCond %{HTTP_HOST} ^sub.domain.tld [NC] RewriteRule ^/(.*)$ /sub/$1 [P,L]
HTTP nach HTTPS umleiten
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
Standard-Domain definieren
Der folgende Code definiert eine Standarddomain, d. h. wenn z.B. eine Domain ohne „www.“ eingegeben wird, dass der User automatisch auf www.domain.com weitergeleitet wird
- Dieser Code kann auch bei der Verwendung mehrer Domains verwendet werden, damit alle Aufrufe auf eine defininierte Standarddomain geleitet werden
- Dies ist nicht nur aus suchmaschinentechnischer Sicht von Vorteil (Stichwort Duplicate Content)
Der nachstehende Code bedeuet in etwa folgendes: „Wenn die aufgerufene Domain nicht www.domain.com ist, dann leite den User auf die Domain www.domain.com weiter“
- Gleichzeitig werden alle URI’s mit übergeben
- D. h, wenn ein User www.irgendwas.com/seitexy.html aufruft, wird er automatisch auf die Seite www.domain.com/seitexy.html umgeleitet
RewriteEngine On RewriteCond %{HTTP_HOST} !^www.domain.com$ RewriteRule ^(.*)$ www.domain.com/$1 [L,R=301]
Umleitung auf HTTPS erzingen:
RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
Einzelne Seiten per 301 umleiten:
Mit den nachfolgenden Code können einzelnen Seiten ganz einfach umgeleitet werden
RewriteEngine On RewriteRule ^alteseite.html$ /neueseite.html [R=301,L]
oder wenn auf eine neue Domainunterseite geleitet werden soll
RewriteEngine On RewriteRule ^alteseite.html$ www.neuedomain.at/neueseite.html [R=301,L]
aus dynamischer URL statische machen
Aus folgender URL: www.domain.at/pro_detail.php soll in eine html umgewandelt werden: www.domain.at/pro_detail-1.html – wobei die 1 die variable ist
RewriteEngine On RewriteRule (.*)_(.*).html$ /pro_detail.php?url_isbn=$1 [qsappend,L]
aus dynamischer URL statische machen – wobei als Parameter der Title genommen wird
Hier werden dynamische Urls in statische ausgeben, wobei die URL-Umschreibung nicht anhand einer ID, sondern des Titles der Seite genommen wird
- So kann man statt einer Zahl in der URL ein Keyword platzieren
- Beispiel: aus www.domain.at/pro_detail.php soll www.domain.at/pro_detail-title.html werden
RewriteEngine On RewriteRule ^([^.]+).html$ /pro_detail.php?url_title=$1 [L]
Bestimmten Teil einer URI ersetzen
Unter Umständen möchte man nach Umstellung einer Webseite eine Ordnerbezeichnung in der URL automatisch umleiten, da auf diesen Ordner zahlreiche Backlinks laufen und man diese nicht ändern möchte oder kann
- Beispiel: In der URL kommt „ordner-alt“ vor und diese Zeichen sollen durch „ordner-neu“ ausgetauscht werden
RewriteEngine On RewriteRule ^(.*)ordner-alt([^0-9]*)$ /$1ordner-neu$2 [R=301,L]
Bestimmten Teil einer URI ersetzen – Variante 2
Mit nachstehendem Code kann man Seiten umleiten, die einen bestimmten Begriff in der URL aufweisen
- Z.B. aus www.domain.at/ordner/hotel-wohnen.html soll www.domain-abc.at/hotel-wohnen.html werden, Seiten wie www.domain.at/ordner/wird-nicht-umgeleitet.html werden nicht umgeleitet
- Hier wird einfach nach dem Wort „hotel“ in der URI gesucht, wenn dieses Wort vorkommt, wird auf die Domain www.domain-abc.at umgeleitet
RewriteEngine On RewriteRule ^(.*)hotel(.*)$ www.domain-abc.at/$1hotel$2 [R=301,L]
Bestimmten Teil einer URI mit Bedingung ersetzen – Variante 3
Mit nachstehendem Code werden ebenfalls bestimmte Teile der URI abgefragt und umgeleitet
- Beispiel: Ihre URI hat einen Parameter über das Layout drin
- Dadurch können aber die unterschiedlichen Seiten mit eigentlich gleichem Inhalt unter verschiedenen Layouts und somit unterschiedlichen URL’s abrufbar sein
- Der nachstehende Code macht folgendes: /wien/layoutseppi,irgendwas,alfred/aschenbecher/aschenbecher.htmImmer dann, wenn die fett markierten Teile der URL nicht identisch sind, dann wird schwarz durch rot ersetzt
RewriteEngine On RewriteCond $2<>$3 !^(.+)<>1 RewriteRule ^(.+/layout)([^,]+),irgendwas,([^,/]+)(/.+.htm)$ /$1$3,irgendwas,$3$4 [R=301,L]
Rootseite per 301 auf Unterseite weiterleiten
Hier eine saubere Lösung, um die Rootseite auf eine Unterseite weiterzuleiten
RewriteEngine On RewriteRule ^$ /unterseite.html [R=301,L]
PHP-Seiten bei Aufruf auf .html umleiten
Sie haben Ihre Seiten in PHP geschrieben, möchten aber die Ausgabe der Seiten als .html machen
- Um zu verhindern, dass die Seite unter irgendwas.php und irgendwas.html erreichbar ist, kann man mit folgendem Code den Aufruf der irgendwas.php auf die irgendwas.html umleiten
RewriteEngine On RewriteRule ^([^.]+).html$ /$1.php?rw=1 [QSA,L] RewriteCond %{QUERY_STRING} !^rw=1 RewriteRule ^([^.]+).php$ /$1.html [R=301,L]
Dynamische URL umleiten
Aus www.domain.de/index.php soll www.domain.de/index.php werden
RewriteEngine On RewriteCond %{QUERY_STRING} ^content=hp_service$ RewriteRule ^index.php$ /index.php? [R=301,L]
Dynamische URL umleiten Variante 2
Wenn z.B. alte dynamische URL’s in einem Unterordner (hier „cms“) liegen und dieser Ordner nicht mehr existiert, aber noch ein paar Links drauf zeigen, kann man alle dynamischen URL’s einfach auf die Root-Seite (oder irgendeine andere Seite) leiten
- Alle Seiten wie www.domain.de/cms/index.php= blabla&id=1&Itemid=2 sollen auf www.domain.de geleitet werden
RewriteEngine On RewriteCond %{QUERY_STRING} ^option=com_content([^]+]+)$ RewriteRule ^index.php$ /? [L,R=301]
Dynamische URL umleiten Variante 3
Aus product_info.php?products_id=irgendwas soll www.domain.at/seite-irgendwas.html werden
RewriteEngine On RewriteCond %{QUERY_STRING} ^products_id=([0-9]+)$ RewriteRule ^(.*) www.domain.at/seite-%1.html? [L,R=301]
Dynamische URL umleiten Variante 4
Aus product_info.php?products_id=3197 soll www.domain.at/datei.html werden
RewriteEngine On RewriteCond %{QUERY_STRING} ^products_id=([0-9]+) RewriteRule ^(.*)$ www.domain.at/datei.html? [R=301,L]
Wenn sich aus der Product_ID der Dateiname für die Detailseite erfassen lässt (product_id=123 -> neue Seite 123.html), könnte man „datei.html“ durch „%1.html“ ersetzen
- Durch das „?“ am Ende von datei.html wird verhindert, dass der Query_String weiter übergeben wird, sonst würde er auf datei.html?products_id=3197 umleiten, so wird auf datei.html geleitet
Dynamische URL umleiten Variante 5
Aus seite.php?id=1234 soll www.domain.at/seite-1234.html werden, gleichzeitig soll bei Aufruf der dynamischen Seite seite.php?id=1234 diese auf seite-1234.html per 301 umgeleitet werden
RewriteEngine On RewriteCond %{QUERY_STRING} ^id=([0-9]+)$ RewriteRule ^(.*) www.domain.at/seite-%1.html? [L,R=301] RewriteRule ^artikel([0-9]+).html$ /seite.php?id=$1&umgeleitet=ja
Um eine Endlosschleife zu vermeiden, wird an die interne RewriteRule einfach „&umgleitet=ja“ dran gehängt
Dynamische URL umleiten Variante 6
Aus domain.de/?rubrik:keyword_Keyword2 soll domain.de/rubrik-keyword-Keyword2 werden (beide Richtungen)
RewriteEngine On RewriteCond %{QUERY_STRING} ^([A-Za-z]+)$ RewriteRule ^index.php$ www.domain.de/%1? [R=301] RewriteRule ^([A-Za-z]+)$ /index.php?$1&umgeleitet=ja RewriteCond %{QUERY_STRING} ^([A-Za-z]+):([A-Za-z]+)$ RewriteRule ^index.php$ www.domain.de/%1-%2? [R=301] RewriteRule ^([A-Za-z]+)-([A-Za-z]+)$ /index.php?$1:$2&umgeleitet=ja RewriteCond %{QUERY_STRING} ^([A-Za-z]+):([A-Za-z]+)_([A-Za-z]+)$ RewriteRule ^index.php$ www.domain.de/%1-%2-%3? [R=301] RewriteRule ^([A-Za-z]+)-([A-Za-z]+)-([A-Za-z]+)$ /index.php?$1:$2_$3&umgeleitet=ja
Mehrere Seiten auf eine Zielseite leiten
Wenn eine Seite unter verschiedenen URL’s erreichbar ist, kann man diese wie folgt auf eine Zielseite umleiten
RewriteEngine On RewriteRule ^verzeichnis/seite1.htm$|^unterseite23.htm$| ^verzeichnisneu/verzeichnis2/seite5.htm$ /zielseite.htm [R=301,L]
Einen Ordner simulieren und Dateiaufrufen automatisch per 301 auf diesen Ordner leiten
Beispiel: Sie haben eine Datei im Rootordner liegen und möchten wegen der Optik einen Unterordner simulieren
- Die Datei im Rootverzeichnis lautet „martin.php“, diese soll aber beim Aufrufen auf /weymayer/martin/ weitergeleitet werden
- Gleichzeitig soll aber beim Aufruf der Seite /weymayer/martin/ der Inhalt der der Seite martin.php angezeigt werden
RewriteEngine On RewriteRule ^weymayer/([^.]+)/$ $1.php?rw=1 [QSA,L] RewriteCond %{QUERY_STRING} !^rw=1 RewriteRule ^martin.php$ /weymayer/martin/$1 [R=301,L]
Beispiel 2: Es sollen alle .php Dateien im Root-Ordner umgeleitet werden
RewriteEngine On RewriteRule ^weymayer/([^.]+)/$ $1.php?rw=1 [QSA,L] RewriteCond %{QUERY_STRING} !^rw=1 RewriteRule ^([^.]+).php$ /weymayer/$1/ [R=301,L]
Dateien mit einer bestimmten Endung (.html, .php) auf simulierten Ordner umleiten
Beispiel: aus einer .html Datei in einem Unterordner soll die Endung .html entfernt bzw. auf den Unterordner geleitet werden (aus autos/audi.html soll autos/audi/ werden)
- Dateien mit der gleichen Endung (.html) im Rootverzeichnis sollen aber von dieser Regel ausgeschlossen sein
RewriteEngine On RewriteRule ^(.*)/([^.]+)/$ /$1/$2.html?rw=1 [QSA,L] RewriteCond %{QUERY_STRING} !^rw=1 RewriteRule ^(.*)/([^.]+).html$ /$1/$2/ [R=301,L]
Auf der Startseite (Root-Seite) den Inhalt einer bestimmten Unterseite anzeigen lassen
Manchmal wird die Root-Index Seite auf irgendeine Unterseite weitergeleitet
- Das kann man mit mod_rewrite auch umgehen
- Beispiel: Sie möchten bei Aufruf der Domain www.domain.at die Unterseite www.domain.at/cmsordner/startseite.html anzeigen lassen
- Jedoch ist ein Redirect nicht optimal, da im Browser dann die Unterseite aufscheint
- Besser ist es, wenn die Unterseite in die Index der Root-Seite einbezogen werden
- Dazu muss man zuerst eine Datei im Root-Ordner anlegen, die „index.htm“ heißt (die Datei kann völlig leer sein)
- In die .htacces kommt folgender Code
RewriteEngine On RewriteRule index.htm$ cmsordner/startseite.html?rw=1 [QSA,L] RewriteCond %{QUERY_STRING} !^rw=1 RewriteRule ^cmsordner/startseite.html$ /$1 [R=301,L]
index.php beim Aufruf auf Rootseite / leiten
Manche CMS und Onlineshopsysteme geben automatisch oft die Startseite als index.php aus
- Dies ist aber nicht gewünscht, da die Seite ja grundsätzlich unter www.domain.at/ erreichbar ist und alles andere unter Umständen als Duplicate Content gewertet werden kann
- Zudem kommt hinzu, dass interne Linkpower auf zwei Seiten (Rootseite und index.php) verteilt wird
RewriteEngine On RewriteCond %{THE_REQUEST} ^[A-Z]{3,9} /index.php HTTP/ RewriteRule ^index.php$ %{HTTP_HOST} [R=301,L,NC]
oder Variante 2
RewriteEngine On RewriteRule ^index.(php|html)$ www.domain.de [R=301,L]
Anhang
Siehe auch
Links
Weblinks