问题现象:浏览器提示too many redirects时,先用curl记录每一跳的Location。不要一上来清空url_rewrite,否则会丢失全部历史301。
| 阶段 | 实际操作 |
|---|---|
| 复现 | 分别请求HTTP/HTTPS、带/不带尾斜杠和目标Store域名,使用curl -I -L --max-redirs 10记录跳转链,找出第一次回到已访问URL的位置。 |
| 取证 | 查询循环中两个request_path的url_rewrite。正常旧路径应custom redirect到新路径,新路径应指向catalog/category/view/id。若两条都是redirect或互指,就修复具体记录。 |
| 修复 | 检查“Create Permanent Redirect for URLs if URL Key Changed”及Store View覆盖。默认范围和子Store分别保存可能生成反向历史重写。 |
| 回归 | Magento记录正确时再查Nginx、CDN和SEO扩展的尾斜杠/HTTP规则。每层只保留一个规范化责任,修改后清CDN 301缓存。 |
可直接执行的检查
curl -I -L --max-redirs 10 https://shop.example/old-category.html
SELECT url_rewrite_id,request_path,target_path,redirect_type,store_id,entity_id FROM url_rewrite WHERE request_path IN ('old-category.html','new-category.html') OR target_path IN ('old-category.html','new-category.html');通过标准:旧URL只跳一次到新URL,新URL直接200;带参数、尾斜杠和两个Store域名都不会回跳。
301会被浏览器和CDN长时间缓存,验收应使用curl和新路径,不要只看原浏览器标签。

