诸位看官,今夜灯昏,老马我泡一壶普洱,聊一段让许多站长欲哭无泪的怪事——站点被重定向。别小看这轻飘飘的三个字,它能让流量像漏水的桶,一夜之间见底。咱不玩虚的,直接撂干货。
第一,先分清“绕圈子”的几种姿态。
域名到域名:A域名一敲,啪,跳到B域名。
目录到目录:/about 想留步,却被踹到 /about-us。
无限循环:A→B→A,浏览器原地打转,像追自己尾巴的小狗。
HTTPS 与 HTTP 互踢:80 端口和 443 端口打得不可开交,用户一脸懵。
第二,老马我当年也踩过坑。凌晨三点,监控报警:跳出率飙到 98%。我抄起终端,curl -I 一看,301 连环跳,跟套娃似的。于是祭出三板斧:
查 DNS:dig +trace 域名,确认解析没被人动手脚。
看服务器:Nginx 配置里 if 语句写得像绕口令,Rewrite 规则层层嵌套。
审 WordPress:主题 functions.php 里被人塞了三行 wp_redirect,顺便把 PHP 的 header 函数也调了个遍。
第三,止血要快。
先临时关 CDN 缓存,别让脏规则继续扩散。
把 Nginx 的 return 301 改成 return 200,让站点先复活。
登录数据库,wp_options 表里把 siteurl 和 home 改回正确值。
清理浏览器缓存,再用 302 临时重定向做 A/B 测试,确保新规则稳如老狗。
第四,防患未然。
用版本控制锁死配置;谁改配置,先过 GitLab MR。
监控脚本每 5 分钟跑一次 curl -L -s -o /dev/null -w "%{http_code} %{url_effective}\n",一旦跳转链超过 2 跳,钉钉机器人直接 @全员。
强制 HTTPS 用 301,但记得在 Cloudflare 页面规则里把“Always Use HTTPS”放最前,别跟服务器打架。
诸位,技术如江湖,刀光剑影里,唯快不破。愿你下次再遇“绕圈子”,不必三更无眠,一杯普洱,一条指令,一拳打回原点。
——老马 记于西湖畔
【教程:WordPress 被重定向排障全纪录】
前置工具
• SSH 终端 + sudo 权限
• wp-cli
• dig / nslookup
• curl -I / curl -L
• 浏览器无痕模式 + DevTools Network
判断重定向类型
a. 浏览器打开站点,F12 → Network → 勾选 Preserve log。
b. 观察状态码:
301/308:永久重定向
302/307:临时重定向
c. 若出现循环,地址栏会闪动,状态码会反复出现相同域名。
排除本地缓存
a. 无痕窗口再试。
b. 若 CDN 已缓存,Purge 全部缓存或临时暂停 CDN。
检查 DNS 污染
a. dig example.com +trace
b. 若解析指向陌生 IP,登录域名注册商,确认 NS 记录、A 记录、CNAME 未被篡改。
审服务器配置
a. Nginx:
sudo nginx -T | grep -n rewrite|return
常见坑:
server {
listen 80;
return 301 https://hostrequest_uri;
}
若同一 server 块里又写了一次 80→443,会二次跳。
b. Apache:
sudo apache2ctl -S
查看 VirtualHost 是否重叠,.htaccess 是否嵌套 RewriteRule。
审 WordPress 核心
a. 登录数据库:
SELECT * FROM wp_options WHERE option_name IN ('siteurl','home');
若值与当前域名不符,直接 UPDATE。
b. 检查主题与插件:
wp plugin list --status=active
wp theme list --status=active
对可疑插件逐一禁用:wp plugin deactivate xxx。
c. 扫描恶意代码:
grep -r "wp_redirect|header.*location" wp-content/
处理 HTTPS 混跳
a. Cloudflare:SSL/TLS → Edge Certificates → Always Use HTTPS 关闭,改用 Nginx 统一处理。
b. Nginx 统一写法:
server {
listen 80;
server_name example.com;
return 301
https://example.com$request_uri;
}
持续监控
a. 用 UptimeRobot 每 5 分钟检测一次 200 状态码。
b. 若状态码非 200,钉钉/Slack 报警。
c. 每周跑一次 wp-cli checksum core,确保核心文件未被篡改。
至此,WordPress 被重定向这一“绕圈子”怪病,已可手起刀落,斩于马下。