文章slug修改后旧URL返回404,如何实现旧URL动态重定向到新地址
旧URL自动重定向到新URL实现方案
1. 新增历史slug映射表
新增post_slug_history数据表存储所有文章的历史slug记录,推荐字段如下:
id:自增主键post_id:关联对应文章的主键ID,新增普通索引提升查询效率slug:历史slug值,新增唯一索引避免重复存储created_at:该slug的生成时间
2. 业务逻辑改造
- 每次用户编辑文章生成新slug前,先将当前生效的旧slug写入
post_slug_history表,若该slug已存在映射关系则跳过重复写入 - 原有的slug重复时追加随机后缀的冲突处理逻辑无需调整
- 请求路由处的判断逻辑按如下顺序调整:
- 先识别请求参数类型:如果是
id参数,直接查询文章表获取该文章当前最新的slug值,建议使用301永久重定向到localhost/ad?slug=最新slug地址,同时兼容最早的ID形式旧访问链接 - 如果是
slug参数,优先查询文章主表的post_slug字段,命中则直接返回文章内容 - 主表未命中时,到
post_slug_history表查询该slug关联的post_id,查询成功则获取对应文章当前的最新slug,执行301重定向到新URL - 两张表均未命中时,再返回404状态码
- 先识别请求参数类型:如果是
3. 可选优化项
- 可定期清理存储超过1年的历史slug记录,避免表数据冗余,通常旧链接的有效访问占比会随时间大幅下降
- 可在重定向逻辑中增加访问统计埋点,根据实际旧链接访问量调整历史记录的清理周期
内容的提问来源于stack exchange,提问作者DB_cont
相关产品推荐
相关产品推荐

