Nginx活动下线应使用302临时重定向:首选return 302指令实现简洁跳转;需保留路径时用rewrite + redirect;复杂场景可配合命名location添加中间处理;务必避免误用301并清除浏览器缓存验证。

活动结束后临时跳转,本质是“短期行为终止”,Nginx 用 302 重定向正合适——它不改搜索引擎索引,也不缓存跳转关系,原 URL 依然有效,随时可恢复访问。
明确配置目标
活动页(如 promo.example.com)下线后,把所有访问临时导向主站首页或公告页,但不锁定新地址。关键点有三个:
- 状态码必须是 302,不能写成 301 或漏掉状态码
- 跳转目标要简洁,一般不保留
$request_uri(避免把活动参数带到首页) - 只对活动域名或路径生效,不影响主站其他流量
直接用 return 指令(推荐)
最简、最安全的方式,适合固定跳转目标:
server {
listen 80;
server_name promo.example.com;
<pre class="brush:php;toolbar:false;"># 所有请求都 302 跳到主站首页
return 302 https://www.example.com/;
}
说明:return 优先级高,执行后立即返回,不走后续 location 匹配;/ 结尾确保跳转到根路径,避免拼接出奇怪 URL。
用 rewrite + redirect(需保留路径时)
如果活动页本身有多个子路径(如 /sale、/gift),且你想统一跳转但保留原始路径结构(比如跳到主站对应路径),可用 rewrite:
server {
listen 80;
server_name promo.example.com;
<pre class="brush:php;toolbar:false;"># 把所有路径临时跳转到主站同路径(/sale → https://www.example.com/sale)
rewrite ^/(.*)$ https://www.example.com/$1 redirect;
}
注意:redirect 是 flag,表示 302;permanent 才是 301。别混淆。
配合命名 location 做更精细控制
若需跳转前加日志、限流或判断,可结合命名 location:
server {
listen 80;
server_name promo.example.com;
<pre class="brush:php;toolbar:false;">location / {
return 302 @main;
}
location @main {
proxy_pass https://www.example.com/;
# 此处可加 access_log、limit_req 等指令
}
}
这种写法少见,一般用于需要中间处理的场景;纯跳转推荐前面两种。
不复杂但容易忽略:检查浏览器是否缓存了旧的 301,测试时用无痕模式或清空 DNS/HTTP 缓存;上线后用 curl -I 验证响应头里确实是 Location 和 302 Found。











