在日常维护 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 中的 siteurl 和 home 两个字段控制。如果这两个字段仍然设置为旧域名,即使 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 数据库 | siteurl 与 home 字段为旧域名 |
| 系统或浏览器缓存 | DNS 缓存未清空 |
💡 总结
WordPress 出现访问 IP 地址仍跳转到旧域名的问题,需要多层次综合排查,包括 Apache 配置、网站文件、数据库以及系统缓存,而不仅仅局限于虚拟主机设置。经过整体清理后,再通过局域网其他主机进行访问验证,可确认是否彻底修复。