Jak mogę przekierować mydomain.comi dowolną subdomenę *.mydomain.comdo www.adifferentdomain.comkorzystania z NGINX?
Odpowiedzi:
nazwa_serwera obsługuje dopasowania sufiksów przy użyciu składni .moja_domena.com:
server {
server_name .mydomain.com;
rewrite ^ http://www.adifferentdomain.com$request_uri? permanent;
}
lub w dowolnej wersji 0.9.1 lub nowszej:
server {
server_name .mydomain.com;
return 301 http://www.adifferentdomain.com$request_uri;
}
listenDyrektywa domyślnie przyjmuje port 80, jeśli nie jest określony. W rzeczywistości jest to trochę bardziej skomplikowane niż ogólnie; zobacz dokumentację konfiguracji nginx, aby uzyskać więcej informacji.
?osiągniesz na końcu?
rewritei return 301 $scheme://www.adifferentdomain.com$request_uri;?
$request_urijuż ma ciąg zapytania, nie ma potrzeby ponownego dodawania go. return 301Składnia jest nowszy, i nie powinno być żadnej różnicy w zachowaniu między tymi dwoma metodami, ale kiedy pierwotnie odpowiedział na to pytanie, wiele dystrybucji nie ma wymaganej wersji, więc poszedłem z bezpieczniejszej składni.
server {
server_name .mydomain.com;
return 301 http://www.adifferentdomain.com$request_uri;
}
http://wiki.nginx.org/HttpRewriteModule#return
i
Po co używać modułu przepisywania, jeśli możesz return? Technicznie rzecz biorąc, returnjest częścią modułu przepisywania, jak możesz przeczytać tutaj, ale ten fragment jest łatwiejszy do odczytania imho.
server {
server_name .domain.com;
return 302 $scheme://forwarded-domain.com;
}
Możesz również nadać mu przekierowanie 301.
return 302 $scheme://forwarded-domain.com$request_uri;
To powinno działać przez HTTPRewriteModule .
Przykład przepisania z www.example.com na example.com:
server {
server_name www.example.com;
rewrite ^ http://example.com$request_uri? permanent;
}
server_name example.com www.example.com;.
Jeśli chcesz przekierować żądania z „domena1.com” do „domena2.com”, możesz utworzyć blok serwera, który wygląda następująco:
server {
listen 80;
server_name domain1.com;
return 301 $scheme://domain2.com$request_uri;
}
listen 443;
Możesz po prostu napisać warunek if w bloku {} serwera:
server {
if ($host = mydomain.com) {
return 301 http://www.adifferentdomain.com;
}
}
Tymczasowe przekierowanie
rewrite ^ http://www.RedirectToThisDomain.com$request_uri? redirect;
Trwałe przekierowanie
rewrite ^ http://www.RedirectToThisDomain.com$request_uri? permanent;
W pliku konfiguracyjnym nginx dla określonej witryny:
server {
server_name www.example.com;
rewrite ^ http://www.RedictToThisDomain.com$request_uri? redirect;
}