302重定向用于多域名临时聚合,不传递权重、不被长期缓存、不改写索引,适用于活动页、灰度发布、a/b测试等场景;配置推荐用return 302,避免if嵌套,注意循环跳转和https策略合理性。

多域名聚合时用 302 重定向,核心目标是临时将多个域名指向主站,又不干扰搜索引擎收录——比如活动页、灰度发布、A/B 测试或短期运营入口。它和 301 的关键区别在于:不传递权重、不被长期缓存、不改写搜索索引。
明确适用场景再动手
302 不适合做长期域名合并(那是 301 的事),但适合以下情况:
- 多个推广子域(如 promo1.example.com、event.example.com)临时跳转到主站活动页
- 测试新域名(beta.example.com)是否可用,暂不替换线上索引
- 按请求头、IP 或 Cookie 动态决定是否跳转(需配合 if 或 map 指令)
- 避免因误配导致 SEO 权重被永久转移
基础配置:单域名 302 跳转
最简方式是用 return 302,性能高、语义清晰:
server {
listen 80;
server_name promo1.example.com promo2.example.com;
return 302 https://www.example.com/activity?source=$host;
}
说明:
- $host 获取访问的原始域名,可用于归因分析
-
不加 $request_uri 就只跳首页;加了则保留路径和参数(如
/page?id=1) - 若只想跳首页且不带参数,写成
return 302 https://www.example.com/;
多域名分路径跳转(正则匹配)
当不同域名要跳到不同路径时,用 rewrite + redirect 标志 更灵活:
server {
listen 80;
server_name ~^(?<subdomain>[a-z0-9\-]+)\.example\.com$;
<pre class="brush:php;toolbar:false;"># promo 开头的跳活动页,test 开头的跳测试页
if ($subdomain ~* ^promo) {
return 302 https://www.example.com/promo/$request_uri;
}
if ($subdomain ~* ^test) {
return 302 https://www.example.com/test/$request_uri;
}
# 兜底:其他子域跳首页
return 302 https://www.example.com/;
}
注意:
- 避免在 location 块里嵌套多个 if,优先用 server_name 正则捕获 + return 组合
- Nginx 中 if 属于慎用指令,简单判断可用,复杂逻辑建议用 map 提前定义变量
- rewrite … redirect 等价于 return 302,但 return 更轻量、更推荐
带条件的跳转(如仅限 HTTP 请求)
常见需求:所有子域在 HTTP 下强制跳 HTTPS 主站,但仍是临时跳转:
server {
listen 80;
server_name *.example.com;
# 只对非 www 和非主域名生效
if ($host !~ ^(www|www\.example\.com|example\.com)$) {
return 302 https://www.example.com$request_uri;
}
}
补充说明:
- HTTPS 跳转本身建议用 301(因属长期安全策略),但若整个聚合方案是临时的,302 也合理
- 务必测试跳转链是否形成循环(如 A→B→A),Nginx 日志中的
http_referer和状态码能快速定位 - 上线前用 curl -I 验证响应头:
curl -I http://promo1.example.com应返回HTTP/1.1 302 Found和正确 Location











