最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Nginx 如何在 Nginx 中配置将携带推广渠道参数的营销落地页 302 重定向到干净页
时间:2026-08-18 11:44:48 编辑:袖梨 来源:一聚教程网
Nginx可通过map预定义推广参数匹配规则,结合if判断$has_tracking实现302重定向,用$scheme://$host$uri构造无参URL,避免搜索引擎收录带参页。
在 Nginx 中,可以通过 if 指令结合正则匹配查询参数(如 utm_source、ref、channel 等),对带推广参数的请求做 302 重定向,去掉参数后跳转到干净的 URL。核心是识别并剥离 query string,保留路径部分。
识别并匹配常见推广参数
Nginx 的 $args 变量包含完整查询字符串,但直接匹配较难;更可靠的方式是用 $arg_* 获取单个参数值(如 $arg_utm_source),或用 map 预定义规则。推荐使用 map 方式统一判断——避免多个 if 嵌套,提升可读性和性能。
- 在
http块中定义 map,标记是否含推广参数:
map $args $has_tracking {~*(utm_source|utm_medium|utm_campaign|ref|channel|source|medium) "1";default "";}该 map 会匹配任意含上述关键词(不区分大小写)的查询参数名,只要出现就设为 "1"。
对匹配路径做条件重定向
在 server 或 location 块中,用 if 判断 $has_tracking,然后用 return 302 跳转到无参 URL:
-
$scheme://$host$request_uri包含参数,不能直接用;需构造无参 URL - 推荐用
$scheme://$host$uri——$uri是不含 query 的路径部分 - 确保重定向 URL 不带尾部问号(Nginx 自动省略空 query,无需额外处理)
location /landing/ {if ($has_tracking) {return 302 $scheme://$host$uri;}}例如访问 /landing/?utm_source=wechat&ref=abc → 302 跳转至 /landing/。
支持多路径与排除特定页面
若只对部分落地页生效(如仅 /promo、/offer),可在 location 中精确匹配;若需排除某些带参但不应跳转的页面(如含 ?debug=1),可扩展 map 逻辑:
- 加一个
$skip_redirectmap,匹配 debug 或白名单参数 - 在 if 中组合判断:
if ($has_tracking && !$skip_redirect) { ... } - 也可用
if ($args ~* "^(?=.*utm)(?!.*debug).*$")复杂正则(不推荐,易出错)
验证与注意事项
- 重定向必须用
302(临时跳转),避免搜索引擎误收录带参页 - 不要在
if中使用rewrite+redirect,return 302更高效、语义清晰 - 测试时用
curl -I查看响应头,确认状态码和Location正确 - 上线前 reload nginx 并检查 error log,
if在 location 外不生效,且不能嵌套