一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

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 块:

  1. server_name 同时写两个域名,确保全覆盖
  2. return 301 https://www.example.com$request_uri; 跳转,保留路径和参数
  3. 不推荐 rewriteif,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 的跳转块:

  1. server_name example.com,只匹配裸域名
  2. 必须加载能覆盖 example.com 的 SSL 证书(通配符 *.example.com 或 SAN 多域名证书均可)
  3. 同样用 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

  1. server_name www.example.com,不包含裸域名
  2. 复用同一份 SSL 证书(若已支持通配符或 SAN)
  3. 里面放 root、index、location 等实际服务配置,不参与跳转逻辑

这样三块分离:HTTP 全量跳转 → HTTPS 裸域名跳转 → HTTPS 主站服务,职责清晰、无冲突、易维护。

热门栏目