web-dev-qa-db-fra.com

https: // redirection vers https: // www dans NGINX

Comment rediriger tous les liens non-www vers mon site Web vers https://www. Je sais qu'il existe de nombreuses solutions pour .htaccess mais je n'ai rien trouvé de suffisant pour nginx.

Pour le moment, tout ce que j'ai est

##
# 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;
}

qui redirige:

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

à https://www.example.com qui est ce que je veux, sauf que https://example.com ne redirige pas https://www.example.com

Comment puis-je obtenir que https:// soit redirigé vers https://www.?

2
Recap

Depuis ma dernière réponse en utilisant le "si" n'est pas recommandé dans la plupart des cas, je suis venu avec une autre solution qui semble fonctionner parfaitement.

Ce que j'ai fait était de créer un autre bloc de serveur avec www dans le server_name et j'ai redirigé mes autres blocs de serveur vers celui-ci.

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

Jusqu'ici, je suis arrivé à une simple déclaration if sous le port 443 pour vérifier si le domaine est non-www, puis rediriger vers www.

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
...

Je ne suis pas un expert, mais je ne pense pas que ce soit la meilleure solution car il s'agira d'une déclaration if pour chaque demande, si j'ai raison.

0
Recap