web-dev-qa-db-ja.com

NGINXのhttps:// wwwへのリダイレクト

私のウェブサイトへのwww以外のリンクをすべてhttps://www.にリダイレクトするにはどうすればよいですか。

現時点で私が持っているのは

##
# Redirect non-www to www
##
server {
     listen 80;
     server_name example.com; # add other domains separated by a space as necessary
     rewrite ^/(.*)$ https://www.example.com/$1 permanent;
}

どのリダイレクト:

example.com
www.example.com
http://example.com
http://www.example.com

https://www.example.comは、https://example.comhttps://www.example.comをリダイレクトしないことを除いて、私が望むものです

どうすればhttps://を取得してhttps://www.にリダイレクトできますか?

2
Recap

「if」ステートメントを使用した最後の回答はほとんどの場合推奨されないため、完全に機能していると思われる別のソリューションを思い付きました。

私がしたことは、server_nameにwwwを含む別のサーバーブロックを作成し、他のサーバーブロックにリダイレクトさせました。

server {
    listen 80;
    listen [::]:80 default_server ipv6only=on;
    return 301 https://www.example.com$request_uri;
}

# HTTPS — proxy all requests to the Node app
server {
    # Enable HTTP/2
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name example.com;
    return 301 https://www.example.com$request_uri;

    # Use the Let’s Encrypt certificates
    ...
}

server {
    # Enable HTTP/2
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name www.example.com;

    # Use the Let’s Encrypt certificates
    ...
}
1
Recap

これまでのところ、ドメインが非wwwであるかどうかを確認してからwwwにリダイレクトする、ポート443の下の単純なifステートメントです

server {
# Enable HTTP/2
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name example.com;
if ($Host = example.com) {
    return 301 https://www.example.com$request_uri;
}

# Use the Let’s Encrypt certificates
...

私は専門家ではありませんが、私が正しい場合は、すべてのリクエストに対してifステートメントを実行するため、これが最良のソリューションだとは思いませんか?

0
Recap