问题出现得很突然,日志倒是留得挺全。想给旧栏目做跳转,写了 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 就说明还是内部重写。如果同一现象隔几天又出现,说明根因没找到,别当偶发处理。