Nginx mengalihkan semua subdomain domain lama ke yang baru


10

Saya memiliki domain yang sangat panjang, jadi saya memutuskan untuk mengubahnya menjadi yang lebih pendek dan lebih ramah. Tetapi karena saya memiliki banyak subdomain (pada kenyataannya, saya memiliki wildcard subdomain), saya ingin mempertahankan subdomain sambil mengubah hanya bagian domain. Jadi, saya membuat aturan berikut:

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

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

Saya telah membaca banyak pertanyaan lain di mana cuplikan ini memecahkan masalahnya. Tetapi dengan saya, Nginx selalu dialihkan ke .domain.in, tanpa subdomain apa pun. Apa yang saya lewatkan? Saya telah menguji regex terhadap regex101 dan contoh-contohnya berfungsi dengan baik, Nginx tampaknya tidak dapat mengarahkan ulang.

Jawaban:


22

Karena nginx 0.8.25 bernama captures dapat digunakan di server_name. Anda harus menggunakannya.

Di sini, sub-domain akan disimpan dalam variabel yang disebut $sub. Maka Anda akan dapat menggunakannya kembali dalam rewritearahan:

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

Atau, Anda dapat menyimpan Regex Anda yang sebenarnya dan menggunakannya $1dalam returnarahan:

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

Akhirnya, perhatikan bahwa returnarahan adalah pendekatan terbaik untuk pengalihan. Anda dapat mengalami Jebakan menggunakan rewriteuntuk pengalihan.


Sempurna. Saya menggunakan pendekatan kembali tetapi masih bernama bagian regex, itu jauh lebih mudah dimengerti.
ranisalt

Bagaimana jika kita ingin mengalihkan tanpa subdomain (www) juga? seperti: sub1.ex.to> sub1.new.in dan ex.to> www.new.in?
R. Canser Yanbakan

1
Perhatikan bahwa '\ w' tidak cocok dengan karakter tertentu yang dapat menggunakan nama domain, misalnya '-'. Karenanya regex di atas akan dialihkan test-sub.doma.inke .domai.in!
Wolfgang

gunakan [\ w \ - \ _] + alih-alih \ w + untuk subdomain yang memiliki - dan _ di dalamnya
Sajjad Ashraf

Apa yang dilakukan ~di regex di awal? Itu tidak membuat karena sesuatu akan muncul sebelumnya ^di regex.
hobbes3
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.