私は非常に長いドメインを持っていたので、それをより短くてよりフレンドリーなドメインに変更することにしました。しかし、私は多くのサブドメインを持っているので(実際、私はサブドメインのワイルドカードを持っています)、ドメイン部分のみを変更しながらサブドメインを保持したいと考えました。そこで、次のルールを作成しました。
server {
listen 80;
server_name ~^(\w+)\.olddomain\.com$;
rewrite ^ $scheme://$1.doma.in$request_uri? permanent;
}
このスニペットが問題を解決した他の多くの質問を読みました。しかし、私と一緒に、Nginxは常にサブドメインなしで.domain.in
にリダイレクトします。何が欠けていますか?私はregex101に対してregexをテストしましたが、例は正常に動作し、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;
}
または、実際の正規表現を保持し、return
ディレクティブで$1
を使用できます。
server {
listen 80;
server_name ~^(\w+)\.olddomain\.com$;
return 301 $scheme://$1.doma.in$request_uri;
}
最後に、return
ディレクティブがリダイレクトの最良のアプローチであることに注意してください。リダイレクトにはrewrite
を使用して Pitfalls に遭遇する可能性があります。