更换域名后旧域名重定向指南 (Apache + CentOS + Let's Encrypt)
本文档记录了将 WordPress 网站从旧域名(katsupersonal.trade)更换为新域名(katsu075.org)后,如何在 Apache 服务器上配置 301 重定向,以实现权重转移和 SEO 保护的完整流程。
环境前提
- 操作系统: CentOS 7 / Rocky Linux / AlmaLinux (RHEL系)
- Web服务器: Apache (httpd)
- DNS服务商: Cloudflare
- SSL证书: Let's Encrypt (Certbot)
第一步:DNS 配置 (Cloudflare)
核心原则: 即使不再使用旧域名,也绝不能在 DNS 服务商处删除它。旧域名必须解析到服务器 IP,服务器才能处理跳转请求。
- 登录 Cloudflare,确保 旧域名 和 新域名 都在列表中。
- 在旧域名的 DNS 设置中,添加 A 记录:
- Type:
A - Name:
@ - Content:
你的服务器IP - Proxy status: 推荐开启 Proxied (橙云)。
- 同样添加
www的 A 记录指向同 IP。
- Type:
- 关键设置:在 Cloudflare 的 SSL/TLS 菜单中,将模式设置为 Full (Strict) 或 Full。
- 注意:严禁设置为 Flexible,否则会导致重定向循环。
第二步:服务器权限与 SELinux (CentOS 必做)
Apache 经常因为权限不足无法读取 Let's Encrypt 证书而报错(file does not exist or is empty)。
执行以下命令修复权限和安全标签:
# 1. 赋予 Apache 读取证书目录的权限
sudo chmod 755 /etc/letsencrypt /etc/letsencrypt/live /etc/letsencrypt/archive
# 2. 修复 SELinux 安全上下文 (CentOS/RHEL 关键步骤)
sudo restorecon -Rv /etc/letsencrypt
第三步:申请旧域名 SSL 证书
为了让 HTTPS 的旧链接也能跳转,必须为旧域名申请证书。如果 Apache 因为找不到证书无法启动,请按以下顺序操作:
-
暂时配置 HTTP 端口:在 Apache 配置中只开放旧域名的
:80端口。 -
启动 Apache:
systemctl start httpd -
运行 Certbot:
Bash
sudo certbot certonly --webroot -w /var/www/html -d katsupersonal.trade -d www.katsupersonal.trade注意:如果以前生成过,证书目录可能会带有后缀,请通过 ls /etc/letsencrypt/live/ 确认实际路径。
第四步:Apache 配置文件设置
建议将旧域名的重定向逻辑单独存放在一个文件中,保持清晰。
文件路径: /etc/httpd/conf.d/old_domains.conf
Apache
# ==========================================
# 1. 旧域名 HTTP (80) -> 跳转到 新域名 HTTPS
# ==========================================
<VirtualHost *:80>
ServerName katsupersonal.trade
ServerAlias www.katsupersonal.trade
# 核心:排除 Certbot 验证目录,其他全部 301 重定向
# 这样是为了保证以后证书自动续期时不会失败
Alias /.well-known/acme-challenge/ /var/www/html/.well-known/acme-challenge/
<Directory "/var/www/html/.well-known/acme-challenge/">
Require all granted
</Directory>
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/\.well-known/acme-challenge/
RewriteRule ^(.*)$ [https://katsu075.org](https://katsu075.org)$1 [R=301,L]
</VirtualHost>
# ==========================================
# 2. 旧域名 HTTPS (443) -> 跳转到 新域名 HTTPS
# ==========================================
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName katsupersonal.trade
ServerAlias www.katsupersonal.trade
SSLEngine on
# 【注意】根据实际情况修改路径,注意是否有 -0001 后缀
SSLCertificateFile "fullchain.pem"
SSLCertificateKeyFile "privkey.pem"
# 301 重定向逻辑
RewriteEngine On
RewriteRule ^(.*)$ [https://katsu075.org](https://katsu075.org)$1 [R=301,L]
</VirtualHost>
</IfModule>
第五步:新域名与 WordPress 配置
确保新域名的配置文件 (katsu075.org.conf) 正常运行,并开启了 .htaccess 支持。
-
开启 AllowOverride: 在
/etc/httpd/conf/httpd.conf或新域名 conf 中,确保网站根目录配置为:Apache
AllowOverride All Require all granted -
配置 .htaccess (位于
/var/www/html/.htaccess): 用于 WordPress 伪静态(文章链接优化)。Apache
RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L]
第六步:验证与测试
配置完成后,重启 Apache:
Bash
sudo httpd -t # 检查语法
sudo systemctl restart httpd
验证方法:
-
使用 curl 命令查看响应头(推荐):
Bash
curl -I [http://katsupersonal.trade](http://katsupersonal.trade)预期输出:
HTTP/1.1 301 Moved Permanently Location: https://www.google.com/search?q=https://katsu075.org/
-
浏览器测试: 使用 无痕模式/隐私模式 访问旧域名,应自动跳转至新域名且无安全警告。
第七步:Google SEO 通知
完成重定向后,必须通知 Google 进行权重转移:
-
Google Search Console (GSC):
-
确保旧域名和新域名都已验证所有权。
-
在 旧域名 的后台,使用 "设置" -> "地址更改" (Change of Address) 工具,申报迁移至新域名。
-
-
提交 Sitemap: 在新域名的 GSC 后台提交最新的 Sitemap。
| 现象 | 可能原因 | 解决方案 |
|---|---|---|
| Apache 启动失败 | 找不到证书文件 / 配置文件语法错误 | 检查 SSL 路径是否正确;检查是否有 -0001 后缀;运行 httpd -t。 |
| Apache 报 "Permission denied" | SELinux 或目录权限限制 | 执行 restorecon -Rv /etc/letsencrypt 和 chmod 755。 |
| 浏览器报 NXDOMAIN | DNS 解析失败 | 检查 Cloudflare 是否添加了 A 记录;本地清理 DNS 缓存。 |
| 浏览器报 "重定向次数过多" | Cloudflare SSL 模式错误 | 将 Cloudflare SSL 设置为 Full (Strict)。 |
