旧版接口重定向应优先用Apache Redirect指令实现301跳转,精准匹配路径前缀并自动保留查询参数;复杂场景需用RewriteRule配合RewriteCond,启用QSA和L标志确保参数传递与规则终止。

旧版接口重定向用 Apache 301,核心是精准匹配请求路径、返回标准状态码、避免干扰主逻辑。不是简单跳首页,而是让 /api/v1/xxx 这类请求干净地指向新地址,同时保留参数、维持 SEO 和客户端兼容性。
明确重定向对象和方式
旧版接口通常是带版本号的路径(如 /api/v1/, /v1/, /old-api/),重定向分两类:
-
整路径前缀跳转:适合结构一致、仅版本变更,用
Redirect最简洁; -
需保留路径+参数、或带条件判断(比如只对特定方法/域名生效),必须用
RewriteRule配合RewriteCond。
⚠️ 注意:
Redirect是 Apache 内置指令,自动处理 URL 编码、路径拼接,无需开启mod_rewrite;而RewriteRule必须搭配RewriteEngine On,且规则更灵活但也更易出错。
推荐配置写法(直接可用)
✅ 简单前缀跳转(推荐用于 /api/v1/ → /api/v2/ 类场景)
在虚拟主机配置或 <Directory> 块内添加:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
Redirect 301 "/api/v1/" "https://yourdomain.com/api/v2/"
效果:GET /api/v1/users?id=123 → 301 跳转到 https://yourdomain.com/api/v2/users?id=123
✅ 自动继承查询参数,无需额外写逻辑。
✅ 带条件的正则跳转(用于多域名、或需过滤请求)
例如:只对 api.old.com 的 /v1/ 请求跳转,且排除健康检查路径:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^api\.old\.com$ [NC]
RewriteCond %{REQUEST_URI} !^/health$ [NC]
RewriteRule ^/v1/(.*)$ https://api.new.com/v2/$1 [R=301,L,QSA]说明:
-
[QSA]保证原始查询参数(如?token=abc)不丢失; -
[L]表示终止后续规则,防止冲突; -
RewriteCond可叠加多个,实现精细控制。
避免常见坑
-
不要在
.htaccess里反复开RewriteEngine On:每个文件最多写一次,重复会导致语法错误; -
路径开头不加
/时行为不同:Redirect 301 /old /new中/old是绝对路径;Redirect 301 old new是相对路径,慎用; - JSON API 客户端可能不自动跟随 301:部分 HTTP 库默认不重定向 POST/PUT 请求,建议前端适配,或服务端同步支持新旧路径双写过渡期;
-
测试务必用
curl -I看响应头:确认返回HTTP/1.1 301 Moved Permanently和Location:字段正确,而不是 302 或 500。
生产环境建议
- 把规则单独存为
/etc/apache2/redirects/api-v1.conf,再用Include引入,方便灰度开关和 Git 管理; - 日志中加
RewriteLog(Apache 2.4+ 用LogLevel alert rewrite:trace3)临时排查匹配问题; - 上线前用
apachectl configtest校验语法,再systemctl reload apache2生效。
不复杂但容易忽略细节。

















