如何实现全站域名所有变体SEO友好的301重定向至https://example.com
嘿,这个问题我之前帮不少开发者踩过坑,一站式搞定所有域名变体的301永久重定向(这可是SEO友好的核心要求)确实得把所有访问场景都覆盖到。下面给你整理了几种主流服务器/CDN的简便实现方案,直接抄作业就行:
如果你用的是Nginx,直接在你的服务器配置文件(比如/etc/nginx/sites-available/example.com)里添加以下规则,可放在主server块之前或单独创建server块:
# 处理 http://example.com 和 http://www.example.com server { listen 80; server_name example.com www.example.com; return 301 https://example.com$request_uri; } # 处理 https://www.example.com server { listen 443 ssl; server_name www.example.com; # 复用主站点的SSL证书配置(必填,否则浏览器会报错) ssl_certificate /path/to/your/cert.pem; ssl_certificate_key /path/to/your/key.pem; return 301 https://example.com$request_uri; } # 你的主站点核心配置 server { listen 443 ssl; server_name example.com; # 这里放站点根目录、反向代理等业务配置... }
逻辑很直白:第一个server块接住所有HTTP端口的请求,不管带不带www都直接跳转到HTTPS主域名;第二个server块专门处理HTTPS的www子域名请求,同样走301永久重定向,确保没有遗漏场景。
如果是Apache服务器,直接在网站根目录的.htaccess文件里添加以下规则(前提是服务器已经开启mod_rewrite模块):
RewriteEngine On # 第一步:把所有HTTP请求强制转成HTTPS RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] # 第二步:把带www的HTTPS请求转成不带www的主域名 RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC] RewriteRule ^(.*)$ https://example.com/$1 [L,R=301]
这个顺序很重要:先统一转到HTTPS,再处理www的跳转,不管用户是从http://www、http://还是https://www进来,最终都会落到https://example.com上,R=301明确指定了永久重定向,完全符合SEO权重传递的要求。
如果你用了Cloudflare作为CDN,完全不用改服务器配置,直接在Cloudflare后台设置页面规则就行:
- 登录Cloudflare,进入你的域名管理页面,找到「规则」->「页面规则」
- 创建新规则,输入匹配模式:
*example.com/* - 添加设置:选择「转发URL」,转发类型选「永久重定向(301)」,目标URL填
https://example.com/$1 - 保存规则,等待生效(一般几分钟就会生效)
这个规则会自动匹配所有前缀(http/https、带不带www)的请求,直接跳转到目标地址,而且Cloudflare会帮你自动处理SSL证书的问题,全程不用碰服务器配置,非常省心。
几个关键注意点
- 一定要用301永久重定向:这是搜索引擎认可的权重传递方式,临时重定向(302)不会传递SEO权重,千万别搞错。
- 测试所有变体:配置完后,一定要手动测试
http://example.com、http://www.example.com、https://www.example.com这几个地址,确保都正确跳转到https://example.com。 - SSL证书:如果是自己配置服务器,记得给
www.example.com也配置SSL证书,不然用户访问https://www.example.com时会先看到浏览器安全警告,再跳转,体验很差。
内容的提问来源于stack exchange,提问作者Valentijn van den Hout





