Nginx 如何做 www 与非 www(no-www)域名互跳?

Nginx www 与裸域互跳配置:独立 server 块 + return 301,$request_uri 保留路径;HTTP/HTTPS 双端口完整示例、选哪个做规范域的 SEO 建议与 FAQ。

最佳实践
Nginx 如何做 www 与非 www(no-www)域名互跳?封面

给要跳走的那一变体单独写一个 server 块,return 301 到规范域名,路径用 $request_uri 原样保留。 www 跳裸域还是裸域跳 www 没有对错,选一个做规范域名、全站统一即可。

www → 裸域

server {
    listen 80;
    listen 443 ssl;
    server_name www.example.com;

    ssl_certificate     /etc/nginx/ssl/example.com.crt;   # 证书需同时覆盖 www 和裸域
    ssl_certificate_key /etc/nginx/ssl/example.com.key;

    return 301 https://example.com$request_uri;
}

server {
    listen 80;
    listen 443 ssl;
    server_name example.com;
    ...
}

裸域 → www(反向同理)

server {
    listen 80;
    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;
}

关键点提醒

  • HTTPS 一侧也要配置跳转:很多人只配了 80 端口的跳转,结果用户直接访问 https://www.example.com 看到的是另一个站点(或证书错误)。两个变体、两个端口 = 四处入口都要照顾到。
  • 证书要覆盖两个名字:证书 SAN 里同时含 example.comwww.example.com,否则 https 跳转前就先报证书错。Let's Encrypt 申请时 certbot -d example.com -d www.example.com
  • 301 会被浏览器和搜索引擎缓存:上线前用 302 验证行为,确认无误再换 301。
  • $request_uri 别丢:漏了它所有内页都跳回首页。

SEO 角度怎么选

  • 搜索引擎把 www 和裸域视为两个不同站点——不统一会分散权重并产生重复内容。
  • 选哪个纯属偏好(裸域更简短;www 在 cookie 作用域和大 DNS 服务商 CNAME 支持上略有优势)。
  • 选一个,全部 301 过去,并在搜索资源平台里声明规范域名,别再反复横跳。

观测云对照

域名跳转配错的表现很隐蔽:一部分老链接进了错误变体,流量悄悄流失。把 Nginx 访问日志接入观测云,按 host 分组看流量分布——规范域名之外的 host 应该只剩 301 跳转流量;若 www 变体上还有大量 200,说明跳转规则没全覆盖。状态码与跳转目标异常都可以配告警。

常见问题(FAQ)

Q:能用 rewrite 代替 return 301 吗?
A:能,但没必要。return 开销更小、意图更清晰;只有需要复杂正则改写时才用 rewrite。

Q:跳转循环了(浏览器报重定向次数过多)?
A:检查 443 的规范 server 块是否也写了跳转规则——常见错误是把 return 301 从 80 块复制到了 443 块。规范域名的 server 块里不该再有指向自己的跳转。

Q:CDN 后面的跳转要注意什么?
A:CDN 可能缓存了跳转响应,改规则后要刷新缓存;同时确认 CDN 回源 Host 头配置,避免源站收到的 Host 已经不是原始域名导致跳转逻辑错乱。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台