最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Nginx 中 301 重定向如何把不带 www 的域名统一跳转到带 www 的主域名
时间:2026-08-23 11:47:48 编辑:袖梨 来源:一聚教程网
最稳妥方案是用两个独立server块分别处理HTTP和HTTPS裸域名跳转:80端口监听example.com与www.example.com并301跳转至https://www.example.com$request_uri;443端口单独监听example.com,配置对应SSL证书后同样301跳转;主站server块仅绑定www.example.com提供实际服务。
直接用 return 301 配独立 server 块最稳妥,不依赖正则、不走 if、性能高且对 SEO 友好。
HTTP 请求统一跳转到带 www 的 HTTPS 地址
所有 HTTP 流量(无论 example.com 还是 www.example.com)都应强制升级到 HTTPS 并带上 www。只需一个监听 80 端口的 server 块:
-
server_name同时写两个域名,确保全覆盖 - 用
return 301 https://www.example.com$request_uri;跳转,保留路径和参数 - 不推荐
rewrite或if,Nginx 最新明确指出它们低效且易出错
示例配置:
server {listen 80;
server_name example.com www.example.com;
return 301 https://www.example.com$request_uri;
}
HTTPS 下裸域名跳转到带 www 的 HTTPS 地址
用户如果直接访问 https://example.com,会绕过 80 端口,必须单独配一个监听 443 的跳转块:
-
server_name example.com,只匹配裸域名 - 必须加载能覆盖
example.com的 SSL 证书(通配符*.example.com或 SAN 多域名证书均可) - 同样用
return 301 https://www.example.com$request_uri;
示例配置:
server {listen 443 ssl;
server_name example.com;
ssl_certificate /etc/nginx/ssl/example.com.crt;
ssl_certificate_key /etc/nginx/ssl/example.com.key;
return 301 https://www.example.com$request_uri;
}
主站服务块只绑定带 www 的 HTTPS 域名
真正提供网页内容的 server 块,应严格限定为 www.example.com:
-
server_name www.example.com,不包含裸域名 - 复用同一份 SSL 证书(若已支持通配符或 SAN)
- 里面放 root、index、location 等实际服务配置,不参与跳转逻辑
这样三块分离:HTTP 全量跳转 → HTTPS 裸域名跳转 → HTTPS 主站服务,职责清晰、无冲突、易维护。