Nginx
Nginx 將所有舊域子域重定向到新域
我有一個很長的域,所以我決定把它改成一個更短、更友好的域。但是由於我有很多子域(實際上,我有一個子域萬用字元),我想保留子域,同時只更改域部分。所以,我制定了以下規則:
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; }
或者,您可以保留實際的正則表達式並
$1
在return
指令中使用:server { listen 80; server_name ~^(\w+)\.olddomain\.com$; return 301 $scheme://$1.doma.in$request_uri; }
最後,請注意該
return
指令是重定向的最佳方法。您可能會遇到使用重定向的陷阱。rewrite