Nginx przekierowuje wszystkie stare subdomeny domen do nowych


10

Miałem bardzo długą domenę, więc postanowiłem zmienić ją na krótszą i bardziej przyjazną. Ale ponieważ mam wiele subdomen (w rzeczywistości mam symbol wieloznaczny subdomeny), chciałem zachować subdomenę, zmieniając tylko część domeny. Dlatego wprowadziłem następującą zasadę:

server {
  listen 80;
  server_name ~^(\w+)\.olddomain\.com$;

  rewrite ^ $scheme://$1.doma.in$request_uri? permanent;
}

Przeczytałem wiele innych pytań, w których ten fragment rozwiązał problem. Ale ze mną Nginx zawsze przekierowuje do .domain.in, bez żadnych subdomen. czego mi brakuje? Przetestowałem regex na regex101 i przykłady działają dobrze, Nginx wydaje się nie być w stanie go przekierować.

Odpowiedzi:


22

Ponieważ nginx 0.8.25 nazwane przechwytywania mogą być używane w nazwa_serwera. Powinieneś ich użyć.

Poddomena będzie tutaj przechowywana w zmiennej o nazwie $sub. Będziesz mógł ponownie użyć go w rewritedyrektywie:

server {
  listen 80;
  server_name ~^(?<sub>\w+)\.olddomain\.com$;
  rewrite ^ $scheme://$sub.doma.in$request_uri? permanent;
}

Alternatywnie możesz zachować swój Regex i użyć go $1w returndyrektywie:

server {
  listen 80;
  server_name ~^(\w+)\.olddomain\.com$;
  return 301 $scheme://$1.doma.in$request_uri;
}

Na koniec zauważ, że returndyrektywa jest najlepszym podejściem do przekierowania. Możesz napotkać pułapki, używając rewriteprzekierowania.


Doskonały. Użyłem metody zwrotu, ale nadal nazwałem część wyrażenia regularnego, jest o wiele łatwiejsze do zrozumienia.
ranisalt

Co jeśli chcemy również przekierowywać bez poddomeny (www)? jak: sub1.ex.to> sub1.new.in i ex.to> www.new.in?
R. Canser Yanbakan

1
Zauważ, że „\ w” nie pasuje do niektórych znaków, które mogą znajdować się w nazwach domen, np. „-”. Powyższe wyrażenie regularne przekieruje zatem test-sub.doma.inna .domai.in!
Wolfgang,

użyj [\ w \ - \ _] + zamiast \ w + dla poddomen, które mają - i _ w nich
Sajjad Ashraf

Co robi ~regex na początku? Nie robi się, ponieważ coś pojawi się wcześniej ^w wyrażeniu regularnym.
hobbes3
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.