Jörg Kruse Webprogrammierung
und SEO seit 2005

Weiterleiten auf kanonische URL

aktualisiert:

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 acht verschiedenen URLs aufrufbar sein:

  • https://example.com/
  • https://example.com/index.php
  • https://www.example.com/
  • https://www.example.com/index.php
  • 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 mod_rewrite zur Verfügung steht, kann beispielsweise mit folgenden Regelsätzen in der .htaccess Datei ein solcher Redirect nach https://example.com/ umgesetzt werden:


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 https://example.com/index.php nach https://example.com/:
RewriteCond %{QUERY_STRING} ^$
RewriteCond %{THE_REQUEST} /index\.php
RewriteRule ^index\.php https://example.com/ [R=301,L]

Die Bedingungen des ersten Regelsatzes werden hierbei mit einem OR verknüpft, da für einen Redirect nur eine Bedingung zutreffen muss:

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

Der erste Regelsatz sorgt außerdem dafür, dass nicht nur die Startseite, sondern auch alle Unterseiten weitergeleitet werden, und der URL-Pfad dabei erhalten bleibt: beispielsweise wird http://www.example.com/foo/bar.html nach https://example.com/foo/bar.html umgeleitet.

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


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 https://www.example.com/index.php nach https://www.example.com/:
RewriteCond %{QUERY_STRING} ^$
RewriteCond %{THE_REQUEST} /index\.php
RewriteRule ^index\.php https://www.example.com/ [R=301,L]