凌晨的时候,我偶然发现网站前台显示的邮箱地址全部变成了 [email protected] 这一串固定字符,起初还以为是被恶意篡改了。后来询问 AI 才恍然大悟,原来是 Cloudflare 的一项内置安全功能在起作用:它会自动将 HTML 代码中的所有明文邮箱地址替换成这一统一格式,目的是防止爬虫抓取到真实的邮箱信息,从而减少垃圾邮件的侵扰。虽然出发点是好的,但对网站运营者来说,如果不了解这一机制,容易误以为出了技术故障。

Cloudflare 是一家全球知名的域名托管和 CDN 加速服务商,同时也直接售卖域名。任何托管在其平台上的域名,都会天然受到多层防护:一方面可以抵御常见的 DDoS 攻击和流量洪水,另一方面在注册域名时会提供隐私保护,避免个人信息被公开。此外,网站上的静态资源如图片、样式表和脚本会被自动缓存到遍布全球的 CDN 节点上,访客从就近节点获取数据,访问速度显著提升。

其邮箱替换功能的实现原理非常底层:在数据包传输层面,Cloudflare 会直接修改返回给浏览器的 HTML 源码,将 mailto: 或文本中出现的真实邮箱字符串全部替换为 [email protected] 占位符。同时,它还会在每个页面中自动注入一个加密的 JavaScript 脚本。当页面正常加载时,这段脚本会检测环境是否安全(例如是否由真实用户通过浏览器访问),如果验证通过,就会动态地把占位符还原成真实邮箱地址。

为什么说这个机制坑惨了我?因为我的网站采用了 PJAX 技术来实现局部刷新,主要目的是让页面上方的音乐播放器可以在切换页面时保持播放不中断。PJAX 的典型缺点就是:页面切换时,默认不会重新执行新加载的 HTML 中所包含的 <script> 标签。除非这些脚本代码在 PJAX 流程中被明确绑定回调,或者原本就存在于父框架页面上,否则它们永远不会运行。

Cloudflare 注入的那个邮箱还原脚本,恰好就是通过 <script> 标签嵌入的。如果访客通过 PJAX 切换页面,这个脚本根本不会执行,于是所有邮箱就永远是 [email protected]。更麻烦的是,我的绝大多数访客来自国内,他们几乎无法看到任何有效的联系方式。这样一来,访客会觉得我故意隐藏邮箱、不配合沟通,反而显得像个小人,实在让我在用户面前出了大丑。

其实关掉这个功能非常简单。Cloudflare 官方有详细的文档说明,我找到的地址是:这一篇。只需打开浏览器自带的中文翻译按钮,按照步骤操作:进入 Cloudflare 仪表盘 → 选择对应域名 → 点击“安全性” → 找到“设置” → 关闭“电子邮箱地址混淆”开关即可。整个流程不涉及代码修改,对普通用户也很友好。

我是凌晨尝试关闭这个功能的,结果在操作过程中,Cloudflare 的 API 始终返回 504 错误。504 代表网关超时,这说明当时 Cloudflare 官方可能正在对 API 服务进行后台维护或升级,导致无法通过面板同步修改配置。反复尝试无果后,我只能暂时放下这件事。直到星期六早上起床后,我再次登录后台,发现 API 已经恢复正常,于是立刻进入设置页面成功关闭了邮箱混淆功能,整个网站的联系方式终于恢复正常。