Wie kann ich in Nginx auf eine andere Domäne umleiten und dabei gleichzeitig den Pfad UND die Subdomäne beibehalten?

Wie kann ich in Nginx auf eine andere Domäne umleiten und dabei gleichzeitig den Pfad UND die Subdomäne beibehalten?

Ich habe beispielsweise eine Domain olddomain.comundnewdomain.com

So soll die Weiterleitung von Anfragen funktionieren:

sub.olddomain.com/hello/world -> sub.newdomain.com/hello/world olddomain.com/hello/world -> newdomain.com/hello/world

Es gibt viele Subdomänen, daher möchte ich im Idealfall nicht für jede davon eine Regel erstellen.

Dies scheint eine Lösung zu sein:

server {
  listen 80;
  server_name olddomain.com *.olddomain.com;
  rewrite ^(/)(.*)$ http://newdomain.com/$2 permanent;
}

aber es funktioniert nicht mit Subdomains, da alle Subdomains newdomain.com/pathohne Rücksicht auf eine Subdomain auf umleiten würden.

Antwort1

Sie scheinen nach etwas wie diesem zu suchen:

if ($http_host ~ (.*)\.olddomain\.com) {
    set $subdomain $1;
    rewrite (.*)$ http://$subdomain.newdomain.com$1 permanent;
}
rewrite ^(/)(.*)$ http://newdomain.com/$2 permanent;

Dies sind meine Testfälle

$ curl -I -H "Host: test1.olddomain.com" nginx1.tst
HTTP/1.1 301 Moved Permanently
Server: nginx/1.4.4
Date: Thu, 08 May 2014 19:40:33 GMT
Content-Type: text/html
Content-Length: 184
Connection: keep-alive
Location: http://test1.newdomain.com/

$ curl -I -H "Host: test1.test2.olddomain.com" nginx1.tst
HTTP/1.1 301 Moved Permanently
Server: nginx/1.4.4
Date: Thu, 08 May 2014 19:40:38 GMT
Content-Type: text/html
Content-Length: 184
Connection: keep-alive
Location: http://test1.test2.newdomain.com/

$ curl -I -H "Host: test1.test2.olddomain.com" nginx1.tst/with-something/appended.html
HTTP/1.1 301 Moved Permanently
Server: nginx/1.4.4
Date: Thu, 08 May 2014 19:40:54 GMT
Content-Type: text/html
Content-Length: 184
Connection: keep-alive
Location: http://test1.test2.newdomain.com/with-something/appended.html

$ curl -I -H "Host: olddomain.com" nginx1.tst
HTTP/1.1 301 Moved Permanently
Server: nginx/1.4.4
Date: Thu, 08 May 2014 19:41:10 GMT
Content-Type: text/html
Content-Length: 184
Connection: keep-alive
Location: http://newdomain.com/

verwandte Informationen