301-Umleitung von der zweiten Domäne zur ersten über htaccess, mod_rewrite unter Beibehaltung der Subdomänen – irgendwelche Tipps?

301-Umleitung von der zweiten Domäne zur ersten über htaccess, mod_rewrite unter Beibehaltung der Subdomänen – irgendwelche Tipps?

Ich habe heute in den Röhren herumgesucht, aber aufgrund meiner begrenzten Kenntnisse über Mod_Rewrite und reguläre Ausdrücke habe ich Schwierigkeiten.

Was ich erreichen möchte, ist eine Umschreibung von Domäne1 (einschließlich Subdomänen) in Domäne2 (einschließlich Subdomänen) und eine Implementierung als 301. Domäne 2 ist die primäre Domäne, Domäne 1 wird (vorerst) nur daneben eingerichtet und ist wirklich nur da, weil „sie da ist“ (eine bessere Verwendung steht noch aus, ich dachte, ich könnte sie in der Zwischenzeit nutzen, um etwas zu lernen).

Domäne 2 ist als Platzhalter konfiguriert und hostet Microsites, die über die interne Umschreibung von Subdomäne -> Unterordner angezeigt werden. (Ich poste gerne auf Anfrage Code dafür, es ist nicht schwierig, aber aus irgendeinem Grund hat es eine Weile gedauert, bis ich es ohne unendliche Umschreibungen zum Laufen gebracht habe.) Domäne 1 (die temporäre Domäne) ist überhaupt nicht eingerichtet, aber nur, weil ich vor mehreren Optionen stehe (ein von DirectAdmin implementierter „Alias“ oder „Zeiger“ oder als separate Domäne hinzugefügt und als Platzhalter konfiguriert). Wenn jemand zu Domäne 1 (der Weiterleitungsdomäne) geht, sollte Folgendes passieren:

http://sub.domain1.tld -> http://sub.domain2.tld
http://sub.domain1.tld/content.php -> http://sub.domain2.tld/content.php
http://domain1.tld -> http://domain2.tld
http://domain2.tld

Was mich stört, ist, dass alle im Web verfügbaren Lösungen Subdomains entweder Verzeichnissen zuordnen oder nur so codiert sind, dass sie Anfragen über verarbeiten können http://domain1.tld/. Einer meiner eigenen alten htaccesses, um eine .co.uk- auf eine .com-Domain umzuleiten, enthält die ersten Ansätze meines Ziels:

RewriteCond %{HTTP_HOST} ^(www\.)?([^\.]+)\.foo\.com [NC] 
RewriteRule ^(.*)$ http://foo.co.uk/$1 [R=301,L]

Ich verstehe, dass $1damit alles nach der Domäne bezeichnet wird, das mit dem ^(.*)$Muster übereinstimmt, und %2dass es sich um die Subdomäne handeln würde (also nehme ich an, dass %1es „www.“ wäre, wenn es im http_referer vorhanden wäre, oder andernfalls null?)

...Aber hier stecke ich fest. Was wäre die einfachste Möglichkeit, die Datei umzuschreiben, um alle Variablen auf einen neuen Domänennamen zu übertragen – und dabei keine Subdomänen zu verlieren?

Antwort1

Gibt es einen Grund, dassUmleitenfunktioniert nicht, in der Konfiguration für Domäne1:

Redirect permanent / http://domain2.com/

Redirectleitet alles unter der linken Seite zur rechten Seite um und behält dabei die gleiche Verzeichnisstruktur bei.

Alternativ besteht eine noch einfachere Lösung darin, einfach ServerAlias domain2die Konfiguration für Domäne1 hinzuzufügen. Dadurch werden allerdings keine Weiterleitungen gesendet, sondern der Server reagiert auf Anfragen für Domäne2 auf die gleiche Weise wie für Domäne1.

Antwort2

Versuchen Sie etwas in der Art von (ungetestet):

RewriteMatch 301 http://(.*)domain1.com(.*) http://$1domain2.com$2

Antwort3

Ich glaube, Sie möchten so etwas:

RewriteCond %{HTTP_HOST} ^((www\.)?[^\.]+)\.foo\.com [NC]
RewriteRule ^(.*)$ http://%1.foo.co.uk/$1 [R=301,L]

Dadurch bleibt %1 (der Subdomain-Teil von foo.com, einschließlich www, falls vorhanden) erhalten und wird auf die rechte Seite von eingefügt RewriteRule. Beachten Sie, dass es sich beim mod_rewriteVerstümmeln nur um Zeichenfolgen handelt, Sie können also damit machen, was Sie wollen.

Wenn der optionale www-Teil Probleme bereitet, teilen Sie ihn in zwei RewriteCondAnweisungen auf:

RewriteCond %{HTTP_HOST} ^(www\.[^\.]+)\.foo\.com [NC] [OR]
RewriteCond %{HTTP_HOST} ^([^\.]+)\.foo\.com [NC]
RewriteRule ^(.*)$ http://%1.foo.co.uk/$1 [R=301,L]

verwandte Informationen