更换域名后旧域名重定向

katsu 发布于 2025-11-22 429 次阅读


更换域名后旧域名重定向指南 (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,服务器才能处理跳转请求。

  1. 登录 Cloudflare,确保 旧域名新域名 都在列表中。
  2. 在旧域名的 DNS 设置中,添加 A 记录
    • Type: A
    • Name: @
    • Content: 你的服务器IP
    • Proxy status: 推荐开启 Proxied (橙云)
    • 同样添加 www 的 A 记录指向同 IP。
  3. 关键设置:在 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 因为找不到证书无法启动,请按以下顺序操作:

  1. 暂时配置 HTTP 端口:在 Apache 配置中只开放旧域名的 :80 端口。

  2. 启动 Apachesystemctl start httpd

  3. 运行 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 支持。

  1. 开启 AllowOverride: 在 /etc/httpd/conf/httpd.conf 或新域名 conf 中,确保网站根目录配置为:

    Apache

    
        AllowOverride All
        Require all granted
    
  2. 配置 .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

验证方法:

  1. 使用 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/

  2. 浏览器测试: 使用 无痕模式/隐私模式 访问旧域名,应自动跳转至新域名且无安全警告。


第七步:Google SEO 通知

完成重定向后,必须通知 Google 进行权重转移:

  1. Google Search Console (GSC):

    • 确保旧域名和新域名都已验证所有权。

    • 旧域名 的后台,使用 "设置" -> "地址更改" (Change of Address) 工具,申报迁移至新域名。

  2. 提交 Sitemap: 在新域名的 GSC 后台提交最新的 Sitemap。

现象 可能原因 解决方案
Apache 启动失败 找不到证书文件 / 配置文件语法错误 检查 SSL 路径是否正确;检查是否有 -0001 后缀;运行 httpd -t
Apache 报 "Permission denied" SELinux 或目录权限限制 执行 restorecon -Rv /etc/letsencryptchmod 755
浏览器报 NXDOMAIN DNS 解析失败 检查 Cloudflare 是否添加了 A 记录;本地清理 DNS 缓存。
浏览器报 "重定向次数过多" Cloudflare SSL 模式错误 将 Cloudflare SSL 设置为 Full (Strict)