使用return 301可高效实现旧url统一归档跳转,支持路径前缀匹配、正则重写映射及多域名合并跳转,配置简单、性能优、seo友好,需经语法检查、curl验证及搜索引擎更新。

按路径批量重定向到新归档页
如果多个旧路径(如 /old/news/、/archive/blog/)都要指向同一个归档首页或统一入口,推荐用 location 块 + return:
- 在 server 块中定义匹配规则,例如:
location ^~ /old/ { return 301 https://site.com/archive/; } -
^~表示前缀匹配且优先于正则,适合路径归档这类确定性场景 - 不带
$request_uri,因为目标是统一归档页,而非保留原路径 - 若需跳转到带参数的归档页(如
/archive?source=old),可写成:return 301 https://site.com/archive?source=old;
整站旧路径映射到新归档结构
如果旧 URL 有规律可循(比如 /v1/article/123 → /archive/v1/123),用 rewrite 更灵活:
- 示例:
rewrite ^/v1/article/(\d+)$ /archive/v1/$1 permanent; -
permanent等价于301,语义清晰 - 捕获组
(\d+)提取 ID,复用到新路径中 - 注意:rewrite 在 location 内使用时,需确保 location 范围合理,避免误匹配
多旧域名统一跳至归档主站
当多个旧站点(如 blog-old.com、legacy.site.net)都需归档到同一新地址,可合并 server 块:
- 配置中列出全部旧域名:
server_name blog-old.com legacy.site.net old-v1.com; - 搭配
return 301 https://archive.example.com/; - Nginx 自动匹配任一域名,命中即跳,无需重复 server 块
- 监听端口建议同时覆盖 80 和 443(若旧站有 HTTPS 流量)
验证与上线要点
配置完成后别跳过验证环节:
- 先运行
nginx -t检查语法,再nginx -s reload生效 - 用
curl -I http://old-site.com/old/path确认响应头含HTTP/1.1 301 Moved Permanently和正确Location - 测试时临时改用
return 302避免浏览器缓存干扰 - 上线后更新搜索引擎资源(如 Google Search Console 的“变更地址”工具)











