ワイルドカードSSLに変えたので、サブドメインへ変更したらはまった話

nginxのリダイレクトにはまった話
  • URLをコピーしました!

先日、シングルやマルチドメインSSL証明書からワイルドカードSSLに変更しました。
今まではSSL証明書を作成して設定するのが大変だったので、ディレクトリを切って対応していました。
せっかくワイルドカードSSLに変更したので、何個かサブドメインの配下へと動かしました。

目次

リダイレクト問題

サイト構成をいじると、どうしても出てくるのがリダイレクトの問題。
今回のリダイレクトパターンは2種類ありました。

  • 別サブドメインにそのままリダイレクト

    例)https://www.example.com/test/〜 https://new.example.com/test/〜
  • 直下のディレクトリ名をサブドメインにして、直下のディレクトリを削除してリダイレクト

    例)https://www.example.com/test/〜 https://test.example.com/〜

リダイレクトのやり方

今回はnginxでのリダイレクトです。

別サブドメインにそのままリダイレクト

期待値

https://www.example.com/test/〜 https://new.example.com/test/〜

こちらはそんなに考えなくてもできました。

location /test/ {
     return 301 https://new.exapmle.com/$request_uri;
}

うまくリダイレクトできました。
https://www.example.com/test/〜 https://new.example.com/test/〜

直下のディレクトリ名をサブドメインにして、直下のディレクトリを削除してリダイレクト

期待値

https://www.example.com/test/〜 https://test.example.com/〜

こちらは悩みました。

location /test/ {
    return 301 https://test.example.com/$request_uri;
}

先ほどと同じ設定にすると、直下のディレクトリ名が残ってしまいます。
例)https://www.example.com/test/〜 https://test.example.com/test/〜

別のやり方を考えてみました。

location ~ ^/test/(.*)$ {
    return 301 https://test.example.com/$1;
}

一見良さそうなのですが・・・GETパラメータがあるとパラメータが消えてしまいます。
https://www.example.com/test/〜 https://test.example.com/〜
https://www.example.com/test/?a=1 https://test.example.com/

さらに、別のやり方を考えてみました。

location ~ ^/test/(.*)$ {
    return 301 https://test.example.com/$1$args;
}

$argsだと「?」がなくなってしまいます。
https://www.example.com/test/?a=1 https://test.example.com/a=1

さらにさらに、別のやり方を考えてみました。

location ~ ^/test/(.*)$ {
    return 301 https://test.example.com/$1${is_args}$args;
}

うまくいきました!
https://www.example.com/test/?a=1 https://test.example.com/?a=1

リダイレクトは頻繁に設定するものではないので、結構はまりがち

最初に設定したら変えないのが一番だね

同じように悩んでいる人に届くといいにゃ〜

nginxのリダイレクトにはまった話

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次