
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 $1
damit alles nach der Domäne bezeichnet wird, das mit dem ^(.*)$
Muster übereinstimmt, und %2
dass es sich um die Subdomäne handeln würde (also nehme ich an, dass %1
es „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/
Redirect
leitet 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 domain2
die 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_rewrite
Verstü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 RewriteCond
Anweisungen 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]