全站升级https后规范网址唯一入口的核心是:http请求301跳转至https,且https访问统一至单一canonical域名(www或裸域二选一);需分别配置80端口全量跳转和443端口域名归一化跳转,并避免rewrite、路径丢失等错误。

全站升级 HTTPS 后,规范网址唯一入口的核心是两件事:所有 HTTP 请求必须 301 跳转到对应 HTTPS 地址;所有 HTTPS 访问必须统一到一个 canonical 域名(比如只留 www.example.com 或只留 example.com),避免搜索引擎把带 www 和不带 www 的页面当成两个不同站点。
HTTP 全量跳转到 HTTPS
在独立的 listen 80 server 块中,用 return 301 一次性完成协议升级:
- server_name 必须包含全部旧入口域名,例如:
server_name example.com www.example.com; - 跳转目标写死
https://$host$request_uri,确保协议、域名、路径和参数全部保留 - 不要加
ssl on、证书或任何其他 HTTPS 相关指令——这个块只管 80 端口跳转
HTTPS 下统一主域名(www 与裸域名二选一)
即使 HTTP 已跳转,用户仍可能直接访问 https://example.com 或 https://www.example.com。需在 443 端口分别配置跳转:
- 若主域是
www.example.com,则为example.com单独建一个listen 443 ssl块,return 301 到https://www.example.com$request_uri - 该块必须配好覆盖
example.com的有效 SSL 证书(多域名或通配符证书均可) - 同理,若主域是裸域名,则让
www.example.com的 443 块跳转过去
避免常见破坏唯一性的错误
这些操作会让搜索引擎认为存在多个等效入口,稀释 SEO 权重:
- 只做 HTTP → HTTPS 跳转,却不处理 HTTPS 下的 www / 非 www 分歧
- 在 location / 块里写 return,导致部分路径被遗漏或被其他规则覆盖
- 用 rewrite 替代 return,尤其嵌套 if 判断,容易因匹配顺序出错或触发多跳
- 跳转时丢掉 $request_uri,所有请求都落到首页,子页面全部 404
验证是否真正规范
上线前务必逐项检查:
-
curl -I http://example.com/path?x=1→ 应返回 301 + Location: https://www.example.com/path?x=1 -
curl -I https://example.com/path→ 应返回 301 + Location: https://www.example.com/path -
curl -I https://www.example.com/path→ 应返回 200,且无跳转 - 浏览器地址栏输入任意旧 URL,最终显示的必须是唯一目标域名 + 完整路径











