Menü

Weiterleiten auf kanonische URL

Im Rahmen der Suchmaschinenoptimierung einer Website ist es u.a. wichtig, Inhalte nur unter einer einzigen Adresse bereitzuhalten, der sogenannten kanonischen URL. So könnte die Startseite einer Domain beispielsweise unter folgenden URLs aufrufbar sein:

  • http://example.com/
  • http://example.com/index.php
  • http://www.example.com/
  • http://www.example.com/index.php

Hier entscheidet man sich für einen Standard und leitet die anderen Varianten mit einem Status Code 301 dorthin weiter. Wenn man mod_rewrite zur Verfügung hat, kann man mit folgenden Rules in der .htaccess Datei eine solche Weiterleitung nach http://example.com/ bewerkstelligen:


RewriteEngine on
RewriteBase /

# Weiterleitung von www.example.com nach example.com:
RewriteCond %{HTTP_HOST} !^example\.com$
RewriteRule ^(.*)$ http://example.com/$1 [R=301,L]

# Weiterleitung von example.com/index.php nach example.com/:
RewriteCond %{QUERY_STRING} ^$
RewriteCond %{THE_REQUEST} /index\.php
RewriteRule ^index\.php http://example.com/ [R=301,L]

Die erste Regel sorgt außerdem dafür, dass nicht nur die Startseite, sondern auch alle Unterseiten weitergeleitet werden, wobei der Pfad erhalten bleibt: beispielsweise wird www.example.com/foo/bar.html nach example.com/foo/bar.html weitergeleitet.

Bei der Wahl von http://www.example.com/ als Standard-URL schauen die Weiterleitungen dagegen so aus:


RewriteEngine on
RewriteBase /

# Weiterleitung von example.com nach www.example.com:
RewriteCond %{HTTP_HOST} !^www\.example\.com$
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L]

# Weiterleitung von www.example.com/index.php nach www.example.com/:
RewriteCond %{QUERY_STRING} ^$
RewriteCond %{THE_REQUEST} /index\.php
RewriteRule ^index\.php http://www.example.com/ [R=301,L]

Weiterleiten nach https://

Möchte man zur URL https://example.com/ weiterleiten, kann man den obigen Regelsatz folgendermaßen erweitern:


RewriteEngine on
RewriteBase /

# Weiterleitung von http(s)://www.example.com und http://example.com
# nach https://example.com:
RewriteCond %{HTTP_HOST} !^example\.com$ [OR]
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^(.*)$ https://example.com/$1 [R=301,L]

# Weiterleitung von example.com/index.php nach example.com/:
RewriteCond %{QUERY_STRING} ^$
RewriteCond %{THE_REQUEST} /index\.php
RewriteRule ^index\.php https://example.com/ [R=301,L]

Die Bedingungen der ersten Regel werden hierbei mit einem OR verknüpft, da nur eine Bedingung zutreffen muss, damit weitergeleitet wird:

a) wenn die Domain nicht example.com (ohne www.) entspricht oder b) die Anfrage nicht auf dem HTTPS-Standard-Port 443 hereinkommt

Analog eine Weiterleitung nach https://www.example.com:


RewriteEngine on
RewriteBase /

# Weiterleitung von http(s)://example.com und http://www.example.com
# nach https://www.example.com:
RewriteCond %{HTTP_HOST} !^www\.example\.com$ [OR]
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]

# Weiterleitung von example.com/index.php nach example.com/:
RewriteCond %{QUERY_STRING} ^$
RewriteCond %{THE_REQUEST} /index\.php
RewriteRule ^index\.php https://www.example.com/ [R=301,L]