Nginx

Nginx 將所有舊域子域重定向到新域

  • October 29, 2016

我有一個很長的域,所以我決定把它改成一個更短、更友好的域。但是由於我有很多子域(實際上,我有一個子域萬用字元),我想保留子域,同時只更改域部分。所以,我制定了以下規則:

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

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

我已經閱讀了很多其他問題,這個片段解決了這個問題。但對我來說,Nginx 總是重定向到.domain.in,沒有任何子域。我錯過了什麼?我已經針對 regex101 測試了正則表達式並且範例工作正常,Nginx 似乎無法重定向它。

由於 nginx 0.8.25 命名的擷取可以在 server_name 中使用。你應該使用它們。

在這裡,子域將儲存在一個名為$sub. 然後您將能夠在rewrite指令中重用它:

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

或者,您可以保留實際的正則表達式並$1return指令中使用:

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

最後,請注意該return指令是重定向的最佳方法。您可能會遇到使用重定向的陷阱。rewrite

引用自:https://serverfault.com/questions/583944