事情本身不复杂,线索都在日志里。用记事本存 BingSiteAuth.xml 上传到站点根目录,Bing 站长工具点验证一直提示找不到文件,浏览器访问这个地址明明能打开。
第一反应是「伪静态规则把 .xml 结尾的请求重写到了首页」,验证下来不成立。
真正麻烦的地方在于,几个原因的现象几乎一样。Windows 记事本默认写 UTF-8 BOM,XML 声明前多了三个字节导致解析失败。还有一种是文件被 CDN 缓存成了 403,蜘蛛是以美国节点回源的。
还有一种情况,文件放在子目录 blog 下,验证要求必须是域名根路径。
第一件事是看返回的字节流前三个字节是不是 EF BB BF
curl -s https://www.example.com/BingSiteAuth.xml | head -c 3 | xxd
接着用不带 BOM 的方式重写文件
printf '%s\n' '<?xml version="1.0"?>' '<users><user>ABCDEF0123456789</user></users>' > BingSiteAuth.xml
等前面都确认过,再确认线上返回 200 且类型是 xml
curl -sI https://www.example.com/BingSiteAuth.xml | grep -i content-type
怎么算真的好了,看的是同一批现象。xxd 看前三个字节直接是 3C 3F 78 6D 开头,Bing 后台点验证立刻通过,站点从待验证变成已验证状态。
容易忽略的是,用编辑器另存为无 BOM 的 UTF-8 比随手改更稳,很多验证失败都不是内容写错,而是文件头多了看不见的字节。改动前把原配置备份一份,出问题能马上回滚,这比任何技巧都实用。