中文标签页的地址是 /tag/%E8%BF%90%E7%BB%B4/,WAF 规则把百分号编码判成路径穿越,整批页面返回 403,英文标签页则完全正常。
这类报错背后常见的原因有几处,逐个排除就行。规则对 % 后面紧跟两位十六进制的模式做了宽匹配。另一种情况是中文 slug 没有做静态化,地址里始终带编码。
不容易想到的是,日志里 403 的 URL 被转义,一眼看不出是编码问题。
复现中文标签页的返回码
curl -s -o /dev/null -w '%{http_code}\n' 'https://www.example.com/tag/%E8%BF%90%E7%BB%B4/'
然后把中文标签改成拼音或英文 slug
wp term update post_tag 42 --slug=ops
给已收录的中文地址加 301
rewrite ^/tag/%E8%BF%90%E7%BB%B4/?$ /tag/ops/ permanent;
改之前我把相关日志按时间截了一段存着,事后对时间线用得上。
中途换过一次思路,把范围缩到最小的那一层,反而快了。
改完先别撤,确认这几项。改成拼音 slug 后这批页面全部返回 200,原来的中文地址 301 到新地址,收录量两周内恢复。
补一句。中文 URL 在 WAF 与日志里都容易被误伤,能上拼音就上拼音,省掉一整类问题。这类问题最好一次改到位,反复小改反而容易把原因搅混。
