Hauptdomain example.com und Subdomains *.example.com per Rewrite Rule nach www.example.com umleiten

Um die Hauptdomain example.com sowie alle Subdomains *.example.com nach www.example.com per Rewrite Rule umzuleiten, braucht man einen Regulären Ausdruck, der sowohl example.com als auch alle Subdomains einschließt, aber www.example.com ausschließt, um keine Redirect Loop zu erzeugen. Der Reguläre Ausdruck muß also z.B. folgende Domains/Subdomains matchen:

  • example.com
  • sub.example.com
  • www.sub.example.com
  • sub1.sub2.example.com
  • www.sub1.sub2.example.com

Ausgeschlossen werden muß:

  • www.example.com

Der Regex, der dies bewerkstelligt, lautet:

^(example\.com|((?:\w+(?:-\w+)*\.)*)((?!www\.)\w+(?:-\w+)*)(\.example\.com))$

Für nginx lautet die entsprechende Rewrite Rule:

if ($http_host ~* "^(example\.com|((?:\w+(?:-\w+)*\.)*)((?!www\.)\w+(?:-\w+)*)(\.example\.com))$") {
   rewrite ^ $scheme://www.example.com$request_uri? permanent;
}

Und für Apache:

RewriteCond %{HTTP_HOST} ^(example\.com|((?:\w+(?:-\w+)*\.)*)((?!www\.)\w+(?:-\w+)*)(\.example\.com))$ [NC]
RewriteRule ^(.*)$ http://www.example.com$1 [R=301,L]

Nach oben