在日常维护 WordPress 网站时,常见到一种情况:即使直接访问服务器的 内网 IP 地址,依然会被自动跳转到某个已废弃或更换的旧域名,并且即使清空浏览器缓存也无法解决。这种现象常被误认为是 Apache 配置问题,实际上通常与文件内容、数据库以及历史遗留设置相关。以下是一份完整的排查与解决记录。


💡 现象

  • 访问服务器内网 IP 地址的 WordPress 后台,例如 http://<服务器IP>/<子路径>/wp-admin/,会被重定向到旧域名(如 example-old-domain.com)。
  • 使用命令行工具 curl 访问时,可以看到 HTTP 返回中包含跳转信息,或者 HTML 页面脚本中存在自动跳转代码。
  • Apache 配置文件中旧域名相关的虚拟主机已被禁用,但问题依旧存在。

🗂️ Apache 配置排查

首先确认 Apache 是否仍然引用了旧域名。

🔎 搜索所有 Apache 配置文件

grep -Ri "example-old-domain.com" /etc/apache2/

如果只在已禁用的配置文件(如某些 SSL 配置)中出现,且执行了 a2dissite 禁用操作,理论上不会影响实际访问。

✅ 确认虚拟主机状态

apachectl -S

查看输出的 VirtualHost 列表,确认没有多余的域名绑定,并且 DocumentRoot 正确指向当前 WordPress 文件目录。


🗂️ 浏览器与 DNS 缓存确认

除了浏览器缓存,还需要清理操作系统的 DNS 缓存:

  • macOS:
sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder
  • Windows:
ipconfig /flushdns
  • Linux(systemd-resolved):
sudo systemd-resolve --flush-caches

🧾 文件内容排查

在部分情况下,服务器返回的首页文件(如 index.html)中可能包含写死的跳转脚本,例如:

<script>
window.location.replace("https://example-new-domain.com/path/index_pc.html");
</script>

即使 Apache 配置没有问题,只要文件中存在这种脚本,访问后也会被自动重定向。


💻 WordPress 特有问题:数据库中 siteurl 与 home

WordPress 的后台和前台 URL 跳转逻辑由数据库表 wp_options 中的 siteurlhome 两个字段控制。如果这两个字段仍然设置为旧域名,即使 Apache 配置和文件都正确,访问后台时依然会被自动跳转。

🔎 检查数据库设置

SELECT option_name, option_value FROM wp_options WHERE option_name IN ('siteurl', 'home');

🟢 修改字段

UPDATE wp_options SET option_value = 'http://<服务器IP>/<子路径>' WHERE option_name = 'siteurl';
UPDATE wp_options SET option_value = 'http://<服务器IP>/<子路径>' WHERE option_name = 'home';

也可在 wp-config.php 文件中临时覆盖配置:

define('WP_HOME', 'http://<服务器IP>/<子路径>');
define('WP_SITEURL', 'http://<服务器IP>/<子路径>');

🔄 局域网其他主机验证

在同一局域网内其他主机使用 curl 验证,可排除浏览器缓存或代理干扰,例如:

curl -v http://<服务器IP>/<子路径>/wp-admin/

若返回正常,说明环境配置已修复。


✅ 根本原因总结

可能原因描述
Apache 配置残留配置文件中仍引用旧域名,需 grep 并禁用
静态文件跳转脚本首页文件中包含写死的跳转代码
WordPress 数据库siteurlhome 字段为旧域名
系统或浏览器缓存DNS 缓存未清空

💡 总结

WordPress 出现访问 IP 地址仍跳转到旧域名的问题,需要多层次综合排查,包括 Apache 配置、网站文件、数据库以及系统缓存,而不仅仅局限于虚拟主机设置。经过整体清理后,再通过局域网其他主机进行访问验证,可确认是否彻底修复。

Leave a Reply

Your email address will not be published. Required fields are marked *