加了一条 RewriteRule 处理旧栏目,结果栏目下正常文章也全被跳到首页,日志里匹配数从几十涨到两万多,规则看着只写了一个点。日志里能对上时间点,这种反而好排。

正则里的点号没转义,匹配的是任意字符,不是字面意义上的点。规则又没写结尾锚点,前缀一对上就整条命中,后面更具体的规则排不上。这一点先确认清楚,后面就不用反复试。

RewriteEngine On
RewriteRule ^old-section/(.*)\.html$ /new-section/$1/ [R=301,L]
curl -sI https://example.com/old-section/a.html | head -3

围绕「RewriteRule 正则」排查时,命令行跑一遍比在面板里点十次有用,面板会替你做掉不少隐式操作。先做最小复现,能稳定跑出来的问题,排查成本会低一个数量级。

处理上按这个顺序:把点号写成反斜杠加点,路径开头加 ^,结尾补 $,把匹配范围收窄;用 RewriteCond 先判断具体目录,再决定跳不跳;临时开 rewrite 日志,看请求实际匹配到哪一条;上线前用 curl 跑十条正常地址和十条旧地址对比结果。

结果对不对很好判断,只有旧栏目的 .html 地址被跳走,其他文章返回 200,日志里匹配数回到两位数。

作者 9823189