Zum Inhalt springen

Mod rewrite/Anwendung: Unterschied zwischen den Versionen

Aus Foxwiki
K Textersetzung - „““ durch „"“
K Textersetzung - „–“ durch „-“
 
(3 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 8: Zeile 8:
; URL in der Adressleiste beibehalten
; 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
sub.domain.tld in ein Unterverzeichnis der Website umleiten und die ursprüngliche URL in der Adressleiste des Browsers beibehalten
<syntaxhighlight lang="apache" line>
<syntaxhighlight lang="apache" line copy>
  RewriteEngine on
  RewriteEngine on
  RewriteCond %{HTTP_HOST} ^sub.domain.tld [NC]
  RewriteCond %{HTTP_HOST} ^sub.domain.tld [NC]
Zeile 15: Zeile 15:


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
<syntaxhighlight lang="apache" line>
<syntaxhighlight lang="apache" line copy>
  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]
</syntaxhighlight>
</syntaxhighlight>


=== Umleitung auf HTTPS ===
=== Umleitung auf HTTPS ===
<syntaxhighlight lang="apache" line>
<syntaxhighlight lang="apache" line copy>
  RewriteEngine On
  RewriteEngine On
  RewriteCond %{HTTPS} off
  RewriteCond %{HTTPS} off
Zeile 27: Zeile 27:
; Umleitung auf HTTPS erzingen
; Umleitung auf HTTPS erzingen


<syntaxhighlight lang="apache" line>
<syntaxhighlight lang="apache" line copy>
  RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
  RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
</syntaxhighlight>
</syntaxhighlight>
=== Standard-Domain ===
=== Standard-Domain ===
; 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 beispielsweise 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 bedeutet in etwa Folgendes
; Der nachstehende Code bedeutet in etwa Folgendes
„Wenn die aufgerufene Domain nicht www.domain.com ist, dann leite den User auf die Domain www.domain.com weiter"
"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
* wenn ein User www.irgendwas.com/seitexy.html aufruft, wird er automatisch auf die Seite www.domain.com/seitexy.html umgeleitet
* wenn ein User www.irgendwas.com/seitexy.html aufruft, wird er automatisch auf die Seite www.domain.com/seitexy.html umgeleitet
<syntaxhighlight lang="apache" line>
<syntaxhighlight lang="apache" line copy>
  RewriteEngine On RewriteCond %{HTTP_HOST} !^www.domain.com$ RewriteRule ^(.*)$ www.domain.com/$1 [L,R=301]&nbsp;
  RewriteEngine On RewriteCond %{HTTP_HOST} !^www.domain.com$ RewriteRule ^(.*)$ www.domain.com/$1 [L,R=301]&nbsp;
</syntaxhighlight>
</syntaxhighlight>
Zeile 47: Zeile 47:
; Einzelne Seiten per 301 umleiten
; Einzelne Seiten per 301 umleiten
Mit dem nachfolgenden Code können einzelne Seiten ganz einfach umgeleitet werden
Mit dem nachfolgenden Code können einzelne Seiten ganz einfach umgeleitet werden
<syntaxhighlight lang="apache" line>
<syntaxhighlight lang="apache" line copy>
  RewriteEngine On RewriteRule ^alteseite.html$ /neueseite.html [R=301,L]
  RewriteEngine On RewriteRule ^alteseite.html$ /neueseite.html [R=301,L]
</syntaxhighlight>
</syntaxhighlight>
Zeile 53: Zeile 53:
oder wenn auf eine neue Domainunterseite geleitet werden soll
oder wenn auf eine neue Domainunterseite geleitet werden soll


<syntaxhighlight lang="apache" line>
<syntaxhighlight lang="apache" line copy>
  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]
</syntaxhighlight>
</syntaxhighlight>


=== Dynamische URL statisch machen ===
=== Dynamische URL statisch 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
<syntaxhighlight lang="apache" line>
<syntaxhighlight lang="apache" line copy>
  RewriteEngine On RewriteRule (.*)_(.*).html$ /pro_detail.php?url_isbn=$1 [qsappend,L]
  RewriteEngine On RewriteRule (.*)_(.*).html$ /pro_detail.php?url_isbn=$1 [qsappend,L]
</syntaxhighlight>
</syntaxhighlight>


=== Titel als Parameter ===
=== Titel als Parameter ===
; 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
Zeile 70: Zeile 70:
; Beispiel
; Beispiel
aus www.domain.at/pro_detail.php soll www.domain.at/pro_detail-title.html werden
aus www.domain.at/pro_detail.php soll www.domain.at/pro_detail-title.html werden
<syntaxhighlight lang="apache" line>
<syntaxhighlight lang="apache" line copy>
  RewriteEngine On RewriteRule ^([^.]+).html$ /pro_detail.php?url_title=$1 [L]
  RewriteEngine On RewriteRule ^([^.]+).html$ /pro_detail.php?url_title=$1 [L]
</syntaxhighlight>
</syntaxhighlight>
Zeile 78: Zeile 78:


==== Variante 1 ====
==== Variante 1 ====
In der URL kommt „ordner-alt" vor und diese Zeichen sollen durch „ordner-neu" ausgetauscht werden
In der URL kommt "ordner-alt" vor und diese Zeichen sollen durch "ordner-neu" ausgetauscht werden
<syntaxhighlight lang="apache" line>
<syntaxhighlight lang="apache" line copy>
  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]
</syntaxhighlight>
</syntaxhighlight>
Zeile 87: Zeile 87:
* 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
<syntaxhighlight lang="apache" line>
<syntaxhighlight lang="apache" line copy>
  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]
</syntaxhighlight>
</syntaxhighlight>
Zeile 98: Zeile 98:


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
<syntaxhighlight lang="apache" line>
<syntaxhighlight lang="apache" line copy>
  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]
</syntaxhighlight>
</syntaxhighlight>
Zeile 105: Zeile 105:
; 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
<syntaxhighlight lang="apache" line>
<syntaxhighlight lang="apache" line copy>
  RewriteEngine On RewriteRule ^$ /unterseite.html [R=301,L]
  RewriteEngine On RewriteRule ^$ /unterseite.html [R=301,L]
</syntaxhighlight>
</syntaxhighlight>
Zeile 113: Zeile 113:
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
<syntaxhighlight lang="apache" line>
<syntaxhighlight lang="apache" line copy>
  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]
</syntaxhighlight>
</syntaxhighlight>
Zeile 120: Zeile 120:
==== Variante 1 ====
==== Variante 1 ====
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
<syntaxhighlight lang="apache" line>
<syntaxhighlight lang="apache" line copy>
  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]
</syntaxhighlight>
</syntaxhighlight>


==== Variante 2 ====
==== 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 beispielsweise 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
<syntaxhighlight lang="apache" line>
<syntaxhighlight lang="apache" line copy>
  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]
</syntaxhighlight>
</syntaxhighlight>
Zeile 133: Zeile 133:
==== Variante 3 ====
==== 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
<syntaxhighlight lang="apache" line>
<syntaxhighlight lang="apache" line copy>
  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]
</syntaxhighlight>
</syntaxhighlight>
Zeile 139: Zeile 139:
==== Variante 4 ====
==== 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
<syntaxhighlight lang="apache" line>
<syntaxhighlight lang="apache" line copy>
  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]
</syntaxhighlight>
</syntaxhighlight>


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


==== Variante 5 ====
==== 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
<syntaxhighlight lang="apache" line>
<syntaxhighlight lang="apache" line copy>
  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&nbsp;
  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&nbsp;
</syntaxhighlight>
</syntaxhighlight>


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


==== Variante 6 ====
==== 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)
<syntaxhighlight lang="apache" line>
<syntaxhighlight lang="apache" line copy>
  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
</syntaxhighlight>
</syntaxhighlight>
Zeile 163: Zeile 163:
; 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
<syntaxhighlight lang="apache" line>
<syntaxhighlight lang="apache" line copy>
  RewriteEngine On RewriteRule ^verzeichnis/seite1.htm$|^unterseite23.htm$| ^verzeichnisneu/verzeichnis2/seite5.htm$ /zielseite.htm [R=301,L]
  RewriteEngine On RewriteRule ^verzeichnis/seite1.htm$|^unterseite23.htm$| ^verzeichnisneu/verzeichnis2/seite5.htm$ /zielseite.htm [R=301,L]
</syntaxhighlight>
</syntaxhighlight>
Zeile 171: Zeile 171:
Beispiel
Beispiel
: Sie haben eine Datei im Rootordner liegen und möchten wegen der Optik einen Unterordner simulieren
: 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
<syntaxhighlight lang="apache" line>
<syntaxhighlight lang="apache" line copy>
  RewriteEngine On RewriteRule ^weymayer/([^.]+)/$ $1.php?rw=1 [QSA,L] RewriteCond %{QUERY_STRING} !^rw=1 RewriteRule ^martin.php$ /weymayer/martin/$1 [R=301,L]&nbsp;
  RewriteEngine On RewriteRule ^weymayer/([^.]+)/$ $1.php?rw=1 [QSA,L] RewriteCond %{QUERY_STRING} !^rw=1 RewriteRule ^martin.php$ /weymayer/martin/$1 [R=301,L]&nbsp;
</syntaxhighlight>
</syntaxhighlight>
Zeile 179: Zeile 179:
; Beispiel 2
; Beispiel 2
Es sollen alle .php Dateien im Root-Ordner umgeleitet werden
Es sollen alle .php Dateien im Root-Ordner umgeleitet werden
<syntaxhighlight lang="apache" line>
<syntaxhighlight lang="apache" line copy>
  RewriteEngine On RewriteRule ^weymayer/([^.]+)/$ $1.php?rw=1 [QSA,L] RewriteCond %{QUERY_STRING} !^rw=1 RewriteRule ^([^.]+).php$ /weymayer/$1/ [R=301,L]&nbsp;
  RewriteEngine On RewriteRule ^weymayer/([^.]+)/$ $1.php?rw=1 [QSA,L] RewriteCond %{QUERY_STRING} !^rw=1 RewriteRule ^([^.]+).php$ /weymayer/$1/ [R=301,L]&nbsp;
</syntaxhighlight>
</syntaxhighlight>
Zeile 190: Zeile 190:
Aus einer .html Datei in einem Unterordner soll die Endung .html entfernt bzw.&nbsp;auf den Unterordner geleitet werden (aus autos/audi.html soll autos/audi/ werden)
Aus einer .html Datei in einem Unterordner soll die Endung .html entfernt bzw.&nbsp;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
<syntaxhighlight lang="apache" line>
<syntaxhighlight lang="apache" line copy>
  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]
</syntaxhighlight>
</syntaxhighlight>
Zeile 203: Zeile 203:
* 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
<syntaxhighlight lang="apache" line>
<syntaxhighlight lang="apache" line copy>
  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]
</syntaxhighlight>
</syntaxhighlight>
Zeile 216: Zeile 216:
; Variante 1
; Variante 1
Zudem kommt hinzu, dass interne Linkpower auf&nbsp;zwei Seiten (Rootseite und index.php) verteilt wird
Zudem kommt hinzu, dass interne Linkpower auf&nbsp;zwei Seiten (Rootseite und index.php) verteilt wird
<syntaxhighlight lang="apache" line>
<syntaxhighlight lang="apache" line copy>
  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]
</syntaxhighlight>
</syntaxhighlight>


; Variante 2
; Variante 2
<syntaxhighlight lang="apache" line>
<syntaxhighlight lang="apache" line copy>
  RewriteEngine On RewriteRule ^index.(php|html)$ www.domain.de [R=301,L]
  RewriteEngine On RewriteRule ^index.(php|html)$ www.domain.de [R=301,L]
</syntaxhighlight>
</syntaxhighlight>

Aktuelle Version vom 11. Mai 2025, 21:00 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 beibehalten

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]

Umleitung auf HTTPS

 RewriteEngine On
 RewriteCond %{HTTPS} off
 RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
Umleitung auf HTTPS erzingen
 RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]

Standard-Domain

Standard-Domain definieren

Der folgende Code definiert eine Standarddomain, d. h. wenn beispielsweise 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 bedeutet 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
  • 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]&nbsp;

Seite per 301 umleiten

Einzelne Seiten per 301 umleiten

Mit dem nachfolgenden Code können einzelne 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]

Dynamische URL statisch 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]

Titel als Parameter

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]

URL-Teile 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

Variante 1

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]

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]

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]

Root auf Unterseite weiterleiten

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 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

  • 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

Variante 1

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]

Variante 2

Wenn beispielsweise 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]

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]

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

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&nbsp;

Um eine Endlosschleife zu vermeiden, wird an die interne RewriteRule einfach "&umgleitet=ja" dran gehängt

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 umleiten

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]

Ordner simulieren

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]&nbsp;
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]&nbsp;

Dateien umleiten

Dateien 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)

  • 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]

Inhalte von Unterseiten

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 auf Root (/) 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
Variante 1

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]
Variante 2
 RewriteEngine On RewriteRule ^index.(php|html)$ www.domain.de [R=301,L]


Anhang

Siehe auch

Links

Weblinks