Hier ist meine aktuelle Nginx Conf:
server {
listen 90;
server_name www.domain.com www.domain2.com;
root /root/app;
location / {
try_files $uri =404;
}
location ~ /([-\w]+)/(\w+)/ {
proxy_pass bla bla
}
}
es funktioniert gut, beide www.domain.com
und www.domain2.com
dienen den gleichen Inhalt.
Jetzt möchte ich hinzufügen
Wenn der Benutzer www.domain.com besucht und der Benutzeragent xxx ist, leiten Sie ihn zu www.domain2.com weiter
Ich habe eine Menge Methoden gesucht und ausprobiert, aber keine davon funktioniert.
Antworten:
Es gibt zwei Möglichkeiten, um dieses Problem zu beheben.
Haben Sie zwei separate "Server" -Blöcke für www.domain.com und www.domain2.com und fügen Sie die folgenden Zeilen von Regeln zum "Server" -Block www.domain.com hinzu. Dies ist eine empfohlene Lösung für dieses Problem.
Wenn Sie die Umleitung mit einem einzigen "Server" -Block für beide Domänen verwalten möchten, versuchen Sie es mit den folgenden Regeln
quelle
Schritt 1: Verfügen Sie über zwei Serverblöcke, jeweils einen für domain.com und domain2.com.
Schritt 2: Verwenden Sie es richtig, da es böse ist, wenn es falsch verwendet wird.
Hier ist die Komplettlösung ...
quelle
Der empfohlene Weg wäre wahrscheinlich die Verwendung von a
map
, auch weil diese Variablen nur ausgewertet werden, wenn sie verwendet werden.Auch wird die Verwendung von
return 301 ...
Rewrites vorgezogen, da keine regulären Ausdrücke kompiliert werden müssen.Hier ein Beispiel, in dem Host und User-Agent als verkettete Zeichenfolge mit einer einzelnen Regex verglichen werden:
Und dies könnte noch flexibler sein, wenn zum Beispiel nicht 2, sondern mehr Domänen beteiligt sind.
Hier bilden wir
www.domain.com
mit User-Agents , beginnend mitAgent
bishttp://www.domain2.com
undwww.domain2.com
mit dem genauen User-AgentOther Agent
anhttp://www.domain3.com
:Hinweis: Sie benötigen Nginx 0.9.0 oder höher, damit die verkettete Zeichenfolge in der Karte funktioniert.
quelle