我希望 www 和非 www 的 URL 都能在 https 上转到非 www。
我的 NGINX 配置中有以下块:
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name example.com www.example.com;
return 301 https://example.com$request_uri;
}
server {
# SSL configuration
#
listen 443 ssl default_server;
listen [::]:443 ssl default_server;
...
}
问题是,当我想删除 www 时,example.com 的 www 仍然会在 https 上转换为 www.example.com。
我真的不明白我在这里错过了什么......
答案1
如果您拥有与两个域匹配的 SSL,最简单的方法是 301 返回。
不支持 SNI 的选项
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name example.com www.example.com;
return 301 https://example.com$request_uri;
}
server {
# SSL configuration
#
listen 443 ssl default_server;
listen [::]:443 ssl default_server;
if ($http_host = www.example.com) {
rewrite (.*) https://example.com$request_uri;
}
...
}
如果没有,您将需要 SNI 或另一个 IP 用于 www 记录,然后需要一个临时 ssl(例如来自 Letsencrypt)将您的用户重定向到正确的域。
支持 SNI 的选项
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name example.com www.example.com;
return 301 https://example.com$request_uri;
}
server {
# SSL configuration
#
listen 443 ssl default_server;
listen [::]:443 ssl default_server;
server_name www.example.com;
return 301 https://example.com$request_uri;
...
}