重定向全站旧域名跳转新域名实操:重定向全站旧域名跳转新域名实
当网站更换域名时,如果不做301重定向,旧域名的流量和搜索引擎权重会直接归零。
301重定向全站旧域名跳转新域名,就是把所有旧域名的访问请求永久指向新域名,告诉搜索引擎和用户:这个页面已经永久搬家了。
本文面向零基础用户,以Nginx、Apache和宝塔面板为例,给出可照做的配置步骤,并说明如何验证跳转是否生效。
动手前需要确认的三件事
开始配置前,请先确保以下条件已经满足,否则跳转可能失败或导致网站无法访问。
- 旧域名和新域名都已解析到同一台服务器,或者新域名已解析到目标服务器,旧域名仍指向原服务器。如果旧域名无法访问,跳转配置也不会生效。
- 网站程序已经在新域名上部署完成,包括数据库、静态文件、SSL证书等。不要在新站还没搭建好时就做跳转,否则用户会被引导到错误页面。
- 确认服务器上使用的Web服务器类型,是Nginx、Apache还是其他。下面会分别给出配置方法,你可以根据自己的环境选择。
Nginx环境下配置全站301跳转
如果你的服务器使用Nginx,有两种常见做法:在网站配置文件中添加return 301,或者使用rewrite规则。
推荐前者,效率更高且不易出错。
方法一:修改旧域名的server块
打开旧域名对应的Nginx配置文件,通常路径是/etc/nginx/conf.d/old-domain.conf或/www/server/panel/vhost/nginx/old-domain.conf(宝塔面板路径)。
在server块内添加一行:
server {
listen 80;
server_name old.com www.old.com;
return 301 https://www.new.com$request_uri;
}
如果新域名启用了HTTPS,
把http:换成
//https:,
//
并确保新域名已经配置了SSL证书。$request_uri会保留原始请求的路径和参数,
例如访问old.com/about会跳转到new.com/about。
方法二:使用rewrite规则(适合需要条件判断的场景)
如果只想对特定路径跳转,或者需要根据条件判断,可以用rewrite:
server {
listen 80;
server_name old.com www.old.com;
rewrite ^(.*)$ https://www.new.com$1 permanent;
}
permanent表示301永久重定向。
修改后执行nginx -t测试配置,然后nginx -s reload重载生效。
Apache环境下配置301跳转
Apache通常通过.htaccess文件或虚拟主机配置实现。
如果旧域名站点根目录下有.htaccess文件,加入以下内容:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^old\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.old\.com$ [NC]
RewriteRule ^(.*)$ https://www.new.com/$1 [R=301,L]
如果使用虚拟主机配置文件(如/etc/httpd/conf.d/old.conf),可以在内添加:
Redirect 301 / https://www.new.com/
注意:Redirect指令会跳转所有路径到新域名的根目录,如果希望保留路径,建议使用RewriteRule。
修改后重启Apache:systemctl restart httpd或service apache2 restart。
宝塔面板用户的可视化操作
如果你使用宝塔面板,可以不用手动改配置文件。
登录宝塔后台,进入“网站”列表,找到旧域名对应的站点,点击“设置”。
- 在“域名管理”中,可以添加新域名并设置跳转,但宝塔自带的跳转功能通常针对单个域名,全站跳转建议用“配置文件”修改。
- 点击“配置文件”,会打开当前站点的Nginx或Apache配置。参照上文Nginx或Apache的示例,在
server块内加入return 301或rewrite规则。 - 保存后,宝塔会自动重载Web服务。如果提示错误,检查语法,常见问题是缺少分号或括号不匹配。
对于SSL证书,如果新域名已部署HTTPS,旧域名也建议保留证书或至少确保80端口跳转到新域名的HTTPS,避免浏览器提示不安全。
避开这些常见坑
配置301重定向时,有几个高频错误容易导致跳转失败或循环重定向。
- 跳转循环:如果新域名的配置中也包含了跳转到旧域名的规则,就会形成死循环。检查新域名配置,确保没有反向跳转。
- 路径丢失:使用
return 301 https://new.com不带$request_uri,所有页面都会跳到首页,导致内页权重丢失。务必加上$request_uri或$1。 - HTTPS混合:如果旧域名是HTTP,新域名是HTTPS,跳转后浏览器可能拦截混合内容。建议旧域名也配置SSL,或者直接跳转到HTTPS地址。
- 未测试就上线:修改配置后,先用
curl -I http://old.com查看返回状态码,确认是301且Location指向正确的新域名。
验证跳转是否生效
配置完成后,可以通过以下方式验证:
- 命令行执行
curl -I http://old.com,观察返回的HTTP状态码是否为301,以及Location头部是否指向新域名。 - 浏览器访问旧域名的任意内页,比如
old.com/contact,看是否自动跳转到new.com/contact。 - 使用在线HTTP状态码检查工具,输入旧域名,确认返回301而不是302或200。
- 观察搜索引擎收录变化:301生效后,搜索引擎会逐渐将旧域名的权重转移到新域名,但这个过程需要时间,通常几周到几个月不等。
常见疑问
问:301和302跳转有什么区别?
301是永久重定向,搜索引擎会将旧域名的权重传递给新域名;302是临时重定向,权重传递不明显。域名迁移必须用301。
问:配置后多久生效?
Nginx或Apache重载后立即生效,但浏览器和搜索引擎可能有缓存。可以用无痕窗口或curl测试,搜索引擎更新则需要更长时间。
问:旧域名还需要保留吗?
建议保留至少一年,确保所有流量和权重平稳过渡。如果旧域名不再续费,跳转也会失效。
问:子域名如何跳转?
子域名跳转与主域名类似,在旧子域名的server块中配置return 301指向新子域名即可。如果子域名很多,可以用泛解析配合正则匹配。
完成以上步骤后,你的全站301重定向就已经配置好了。
记得定期检查跳转状态,确保没有遗漏的页面。
如果在操作中遇到报错,优先回看避坑部分,检查配置语法和路径是否正确。