在响应拦截器中修改路由重定向目标地址,需禁用自动跳转(如 Fetch 设 redirect: "manual"),捕获 301/302 响应并读取 Location 头,解析路径后交由前端路由(如 router.push)主动跳转,而非浏览器原生重定向,并注意跨域暴露 Header、路径映射及 SSR 兼容性。

在响应拦截器中修改路由重定向目标地址,本质是拦截 HTTP 响应中的重定向状态(如 301、302、307),解析并改写其 Location 响应头,再交由前端路由(如 Vue Router、React Router)主动跳转。这不能靠单纯修改响应体实现,需结合请求拦截、响应拦截与路由控制三者协同。
识别并捕获重定向响应
后端返回重定向时,通常不带响应体,仅含 Location 头和状态码。Axios 或 Fetch 拦截器默认会自动跟随重定向(redirect: "follow"),导致你收不到原始重定向响应。必须禁用自动跳转:
- Axios:配置
maxRedirects: 0或使用fetch替代; - Fetch:设置
redirect: "manual",此时响应状态为 301/302,response.headers.get("Location")可读取原始跳转地址; - 注意:部分浏览器对跨域响应的
Location头有访问限制,需服务端显式暴露该 header:Access-Control-Expose-Headers: Location。
解析与改写 Location 地址
获取到原始 Location 后,需判断是否为相对路径、绝对路径或跨域地址,并按需替换:
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
- 相对路径(如
/login)可直接拼接到当前 origin 上,用于前端路由跳转; - 绝对路径但同域(如
https://app.example.com/dashboard)可提取 pathname 后交由 router.push; - 若需统一映射(如将
/old-page→/new-page),可在拦截器中维护一个映射表或正则规则; - 跨域地址(如
https://other-site.com)通常禁止前端接管,可记录日志或触发外部跳转(window.location.href = newUrl)。
触发前端路由跳转而非原生重定向
改写后的地址不应交给浏览器自动跳转,而应交由前端路由系统处理,以保持单页应用体验:
- Vue Router:调用
router.push({ path: newPath }),支持保留 query 和 hash; - React Router v6:使用
useNavigate()hook 执行navigate(newPath); - 注意避免重复跳转或路由守卫冲突,建议在跳转前检查当前路由是否已匹配目标地址;
- 若跳转逻辑复杂(如需鉴权后再跳),可将改写后的地址暂存,交由全局路由守卫统一处理。
与中间件扩展结合的设计要点
作为中间件扩展,该能力应可插拔、可配置、不影响其他请求流程:
- 封装为独立函数(如
createRedirectInterceptor(options)),接收重写规则、白名单域名、跳转方式等参数; - 通过请求标识(如自定义 header
X-Handle-Redirect: true)控制是否启用该拦截逻辑; - 错误兜底:当 Location 解析失败或跳转异常时,降级为
window.location.replace()或提示用户; - 避免在 SSR 环境中执行(无 window/router),需做环境判断。


















