Nginx chuyển hướng tất cả các tên miền phụ tên miền cũ sang tên miền mới


10

Tôi đã có một miền rất dài, vì vậy tôi quyết định đổi nó thành một miền ngắn hơn và thân thiện hơn. Nhưng vì tôi có rất nhiều tên miền phụ (trên thực tế, tôi có một ký tự đại diện tên miền phụ), tôi muốn giữ tên miền phụ trong khi chỉ thay đổi phần tên miền. Vì vậy, tôi đã thực hiện các quy tắc sau:

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

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

Tôi đã đọc rất nhiều câu hỏi khác trong đó đoạn trích này đã giải quyết vấn đề. Nhưng với tôi, Nginx luôn chuyển hướng đến .domain.in, không có bất kỳ tên miền phụ nào. Tôi đang thiếu gì? Tôi đã thử nghiệm regex với regex101 và các ví dụ hoạt động tốt, Nginx dường như không thể chuyển hướng nó.

Câu trả lời:


22

Vì nginx 0.8.25 được đặt tên có thể được sử dụng trong server_name. Bạn nên sử dụng chúng.

Tại đây, tên miền phụ sẽ được lưu trữ trong một biến được gọi là $sub. Sau đó, bạn sẽ có thể sử dụng lại nó trong rewritechỉ thị:

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

Ngoài ra, bạn có thể giữ Regex thực tế của mình và sử dụng $1theo returnchỉ thị:

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

Cuối cùng, lưu ý rằng returnchỉ thị là cách tiếp cận tốt nhất cho chuyển hướng. Bạn có thể gặp Cạm bẫy bằng cách sử dụng rewriteđể chuyển hướng.


Hoàn hảo. Tôi đã sử dụng phương pháp trả về nhưng vẫn được đặt tên là phần regex, nó dễ hiểu hơn nhiều.
ranisalt

Điều gì xảy ra nếu chúng ta muốn chuyển hướng mà không có tên miền phụ (www)? như: sub1.ex.to> sub1.new.in và ex.to> www.new.in?
R. Canser Yanbakan

1
Lưu ý rằng '\ w' không khớp với các ký tự nhất định có thể có trong tên miền, ví dụ '-'. Do đó, regex ở trên sẽ chuyển hướng test-sub.doma.inđến .domai.in!
Wolfgang

sử dụng [\ w \ - \ _] + thay vì \ w + cho các tên miền phụ có - và _ trong đó
Sajjad Ashraf

Những gì ~trong regex làm gì lúc đầu? Nó không thực hiện vì một cái gì đó sẽ xuất hiện trước đó ^trong regex.
hobbes3
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.