oneweekonething.com 主域跳转排查报告
01问题概述
在浏览器中访问 https://oneweekonething.com/(主域落地页「一周一事」),页面被自动带到 https://notes.oneweekonething.com/(AI 技术笔记站),落地页无法展示。
| 要素 | 内容 |
|---|---|
| 入口 URL | https://oneweekonething.com/ |
| 跳转目标 | https://notes.oneweekonething.com/ |
| 复现环境 | macOS,Chrome 与 Safari;本机运行 fake-ip 模式代理(Clash/Surge 类) |
| 关键矛盾 | 浏览器会跳转,而 curl 直接请求同一 URL 返回 200,不跳 |
排查目标:确定跳转发生在哪一层——DNS、服务器(nginx)、页面代码,还是客户端(浏览器缓存 / 代理 / 扩展),并给出对应处理方案。
02排查过程与证据
2.1 HTTP 层:8 种请求组合全部 200,无跳转
对主域做了全覆盖请求测试(HEAD 与 GET 各测,GET 用于排除「仅对 GET 生效」的应用层跳转),全部直接返回 200,响应中无 Location 头:
| 测试组合 | 方式 | 结果 | 结论 |
|---|---|---|---|
| https:// 主域,curl 默认 UA | HEAD | 200 · 无 Location | 无跳转 |
| https:// 主域,Chrome UA | HEAD / GET | 200 | 非 UA 条件跳转 |
| http:// 主域(80 端口) | HEAD / GET | 200 | 非协议跳转 |
| https:// www 子域 | HEAD | 200 | www 无跳转 |
| 带 Accept-Language: zh-CN | HEAD | 200 | 非语言条件跳转 |
| 真实 GET,记录 redirect_url | GET | 200 · redirect 为空 | 链路无任何跳转 |
| nginx 默认站点(随机 Host 访问 IP) | GET | 404 | 无「兜底重定向」规则 |
| notes / key 子域 | GET | 200 | 子域为独立应用,正常 |
2.2 DNS 层:四个域名同一台服务器,不存在 DNS 级跳转
本机 dig 首次返回 198.18.0.x——这是 fake-ip 保留网段(198.18.0.0/15),说明本机 DNS 已被代理接管,不代表真实公网解析。改用 DoH(AliDNS / Google DNS)直查,得到真实记录:
四个域名解析到同一个公网 IP(已脱敏),跳转只能由 nginx 按 server_name 分流实现;DNS 层本身不可能产生「主域 → notes」的跳转。
2.3 页面代码层:线上 HTML 无任何跳转逻辑
- <meta refresh> 自动刷新跳转 —— 无
- JS 跳转(window.location / location.href / replace / assign)—— 无
- Service Worker(可能离线劫持响应)—— 未注册
- 统计 / 重定向第三方脚本(gtag 等)—— 无
- canonical 正确指向 https://oneweekonething.com/,SEO 配置无诱导
- robots.txt / sitemap.xml 仅含主域,配置正常
- 线上 HTML 与仓库 index.html 逐字节一致(字节数从略)
页面上到 notes 的引用全部是正常的 <a href> 链接(hero 按钮、导航、产品卡片、页脚),需要用户点击,不会自动跳转。
2.4 Git 历史:全部 5 个初始版本均无跳转代码
2.5 服务端兜底行为:默认站点返回干净 404
用随机 Host 直接访问服务器 IP,nginx 默认站点返回 404 而非重定向——服务器上不存在「未知来源一律跳 notes」的兜底规则。notes 子域是独立的 SSR 应用(「AI Notes 内容索引」),key 子域也正常响应 200。
03根因结论
时间线为何吻合
当前线上版本是 9 月 21 日晚间才部署的,且当天经历了 Refine → Revert → Restore 的高频改动。若更早的某个时刻(如落地页尚未上传、只有 notes 应用在线时)服务器或临时配置下发过一次 301 → notes,浏览器就会把它缓存下来;即使服务器此后修复,缓存仍在本地生效。
可能性排序
| 假设 | 验证证据 | 可能性 |
|---|---|---|
| ① 浏览器缓存 301 | 服务端/代码/DNS 全部排除;站点上线时间与问题出现时间吻合 | 高 |
| ② 浏览器扩展重定向 | 扩展仅影响浏览器,不影响 curl;待无痕窗口对照排除 | 低 |
| ③ 代理工具 rewrite 规则 | curl 经同一代理链路(TUN/fake-ip)实测无跳转,基本排除 | 基本排除 |
| ④ 服务端条件跳转(UA/语言等) | 8 组请求组合实测均 200 | 已排除 |
| ⑤ 页面 meta/JS 跳转 | 线上 HTML 与全部 git 版本均无跳转代码 | 已排除 |
| ⑥ DNS 层跳转 | 四域名同 IP,无 IPv6,NS 为阿里云 | 已排除 |
04处理方案
4.1 三十秒诊断(先做)
- 开无痕/私人窗口(Chrome / Safari 均为 Cmd + Shift + N),访问主域。
- 不跳 → 坐实缓存 301,按 4.2 / 4.3 清理即恢复;仍跳 → 与缓存无关,直接跳到 4.4 深度排查。
4.2 Chrome 清理
- DevTools 单站修复(免清数据,优先):新标签页打开 Cmd + Option + I → Network 面板 → 勾选 Disable cache → 保持 DevTools 开着,地址栏访问主域。真实请求拿到 200 后,旧跳转缓存即被覆盖。
- 清除缓存:Cmd + Shift + Delete → 时间范围选「全部时间」→ 勾选「缓存的图片和文件」(不勾 Cookie,避免登出)→ 删除数据。
- 完全退出重开:Cmd + Q 退出 Chrome 再启动——部分跳转缓存在进程内存里,不重启清不掉。
4.3 Safari 清理
- 开启开发菜单(一次性):Safari → 设置 → 高级 → 勾选「在菜单栏中显示‘开发’菜单」。
- 清缓存:菜单栏 → 开发 → 清除缓存(Option + Cmd + E)。
- 清站点数据:Safari → 设置 → 隐私 → 管理网站数据 → 搜索 oneweekonething → 移除。
- 完全退出重开:Cmd + Q 再启动。备选:开发 → 显示 Web 检查器 → 网络标签勾选忽略缓存后刷新一次。
4.4 清完仍跳:与浏览器无关,查系统层
DNS、hosts、代理是全系统共享的,Safari 与 Chrome 会一起中招:
- 代理工具配置中搜索 oneweekonething,删除可疑 rewrite / 重定向规则
- hosts 文件劫持:grep oneweekonething /etc/hosts,有输出则删除对应行
- 浏览器扩展:chrome://extensions 全部临时停用后逐个排查;Safari → 设置 → 扩展同理
05附录:排查命令
# HEAD:看状态码与 Location 头 curl -sIL https://oneweekonething.com/ # GET:排除仅对 GET 生效的应用层跳转 curl -s -o /dev/null -w "code=%{http_code} redirect=%{redirect_url}\n" https://oneweekonething.com/ # 换 UA / 协议组合复测 curl -sIL -A "Mozilla/5.0" http://oneweekonething.com/
curl -s "https://dns.google/resolve?name=oneweekonething.com&type=A" curl -s "https://dns.alidns.com/resolve?name=oneweekonething.com&type=A" curl -s "https://dns.google/resolve?name=oneweekonething.com&type=AAAA"
# SERVER_IP = 服务器公网 IP(已脱敏) # 随机 Host 打服务器 IP:返回 404 说明无兜底重定向 curl -sI -H "Host: random-test.invalid" http://<SERVER_IP>/ # 证书 SAN 覆盖范围 echo | openssl s_client -connect <SERVER_IP>:443 -servername oneweekonething.com 2>/dev/null | openssl x509 -noout -ext subjectAltName
# hosts 劫持 grep oneweekonething /etc/hosts # 页面代码快速体检(应全部无输出) curl -s https://oneweekonething.com/ | grep -inE "http-equiv.*refresh|location\.(href|replace|assign)" curl -s https://oneweekonething.com/ | grep -ic serviceworker