Nginx, tüm eski alan alt alan adlarını yenisine yönlendirir


10

Çok uzun bir alanım vardı, bu yüzden daha kısa ve daha kolay bir alan adı ile değiştirmeye karar verdim. Ancak çok fazla alt alanım olduğu için (aslında bir alt alan joker karakterim var), yalnızca alan kısmını değiştirirken alt alan adını tutmak istedim. Bu yüzden, aşağıdaki kuralı yaptım:

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

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

Bu pasajın sorunu çözdüğü başka birçok soru okudum. Ama benimle, Nginx her zaman .domain.inalt alan adları olmadan yönlendirir . Neyi kaçırıyorum? Regex'i regex101'e karşı test ettim ve örnekler iyi çalışıyor, Nginx bunu yönlendiremiyor gibi görünüyor.

Yanıtlar:


22

Çünkü nginx 0.8.25 adlı yakalama sunucu_adı içinde kullanılabilir. Onları kullanmalısın.

Burada, alt alan adı adlı bir değişkende saklanacaktır $sub. Ardından, rewriteyönergede yeniden kullanabilirsiniz :

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

Alternatif olarak, gerçek Regex'inizi koruyabilir ve $1bir returnyönergede kullanabilirsiniz :

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

Son olarak, returndirektifin bir yönlendirme için en iyi yaklaşım olduğunu unutmayın . Sen içine çalıştırabilir Tuzaklar kullanarak rewritebir yönlendirme için.


Mükemmel. Dönüş yaklaşımını kullandım ama regex kısmını adlandırdım, anlamak çok daha kolay.
ranisalt

Ya bir alt alan adı (www) olmadan yönlendirmek istiyorsak? gibi: sub1.ex.to> sub1.new.in ve ex.to> www.new.in?
R. Canser Yanbakan

1
Not '\ w' anlamına değil alan adları olabilir belirli karakterleri, örneğin maç '-'. Yukarıdaki regex nedenle yönlendirir test-sub.doma.iniçin .domai.in!
Wolfgang

içinde - ve _ olan alt alan adları için \ w + yerine [\ w \ - \ _] + kullanın
Sajjad Ashraf

~Normal ifadede başlangıçta ne yapar ? ^Normalde daha önce bir şey göründüğünden bu olmaz .
hobbes3
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.