Essa configuração faz o que você pergunta:
server {
listen 80;
listen [::]:80;
server_name www.example.com example.com;
# redirects both www and non-www to https
return 301 https://example.com$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name www.example.com;
include snippets/ssl-example.com.conf;
include snippets/ssl-params.conf;
# redirects www to non-www
return 301 https://example.com$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name example.com;
include snippets/ssl-example.com.conf;
include snippets/ssl-params.conf;
charset utf-8;
# rest of my config
}
Alterei rewrite para return , pois isso é um pouco mais eficiente.
Com return , é necessário usar $request_uri para obter o caminho e os argumentos da solicitação no URL de redirecionamento.
Em seguida, alterei o bloco server_name example.com; with listen 443; para exibir o conteúdo real do site e server_name www.example.com; com listen 443; para redirecionar.