问题出现得很突然,日志倒是留得挺全。想给旧栏目做跳转,写了 RewriteRule 后页面内容确实变了,地址栏还是旧地址,收录里两条并存。

把日志和配置对完,能解释这个现象的基本就这几处。RewriteRule 默认是内部重写,不改变 URL。也可能是缺少 R=301 标志。

不容易想到的是,Apache 的规则顺序被前面的条件拦截。

动手时先确认地址栏与状态码

curl -sI https://www.example.com/old/ | head -3

随后加上永久跳转标志

RewriteRule ^old/(.*)$ /new/$1 [R=301,L]

剩下的就是确认没有其他规则抢先匹配

apachectl -S

隔了一天再看,现象没变,说明不是偶发。

那几天正好在做别的变更,先把时间线对齐才敢动手。

改完先别撤,确认这几项。旧地址返回 301 并跳到新地址,两条地址最终只保留一条。

补一句。内部重写对用户是透明的,看起来像跳转,实际只是换了内容,这种伪装最容易造成重复收录。改完用带 -I 的请求看状态码,返回 200 就说明还是内部重写。如果同一现象隔几天又出现,说明根因没找到,别当偶发处理。

作者 9823189