You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Varnish/Fastly:特定国家全站重定向需排除store-locator页面

特定国家流量重定向排除store-locator页面失败问题解决

问题背景

  • 需求:将特定国家(由georedirect表定义)的所有流量重定向至/fall-2023-collection,但允许/store-locator页面正常加载,不参与重定向
  • 当前异常:所有页面(包括/store-locator)均被重定向到/fall-2023-collection,多次调整条件组合无效

现有代码

recv事件代码

if (req.http.host ~ "site\.url" && req.url != "/fall-2023-collection" && req.url != "/store-locator"  && req.url !~ "\.(jpe?g|gif|png|webp|css|js|json|svg|woff|woff2|html|)$" && table.lookup(georedirect, client.geo.country_code)) {
  error 618 "redirect";
}
elseif (req.http.host ~ "site\.url" && req.url == "/store-locator" && table.lookup(georedirect, client.geo.country_code)) {
  error 617 "redirect_loc";
}
else {
  return (pass);
}

error事件代码

if (obj.status == 618 && obj.response == "redirect") {
  set obj.status = 308;
  set obj.http.Location = "https://" + req.http.host + "/fall-2023-collection";
  return (deliver);
}

if (obj.status == 617 && obj.response == "redirect_loc") {
  set obj.status = 308;
  set obj.http.Location = "https://" + req.http.host + "/store-locator";
  return (deliver);
}

问题原因

核心问题在于条件判断逻辑错误:

  1. 当请求/store-locator时,虽然第一个if条件因req.url != "/store-locator"不触发,但后续的elseif会触发617错误,导致请求被重定向回/store-locator,而非直接放行
  2. 这种冗余的重定向逻辑会让浏览器陷入循环或误判,最终表现为页面被强制跳转到目标集合页

修复方案

优化后的recv事件代码

// 优先处理store-locator请求,直接放行
if (req.http.host ~ "site\.url" && req.url == "/store-locator" && table.lookup(georedirect, client.geo.country_code)) {
  return (pass);
}
// 其他符合条件的流量重定向到fall-2023-collection
elseif (req.http.host ~ "site\.url" 
    && req.url != "/fall-2023-collection" 
    && req.url !~ "\.(jpe?g|gif|png|webp|css|js|json|svg|woff|woff2|html)$" 
    && table.lookup(georedirect, client.geo.country_code)) {
  error 618 "redirect";
}
else {
  return (pass);
}

简化后的error事件代码

if (obj.status == 618 && obj.response == "redirect") {
  set obj.status = 308;
  set obj.http.Location = "https://" + req.http.host + "/fall-2023-collection";
  return (deliver);
}

修复要点

  • 调整判断顺序:优先匹配/store-locator请求,直接返回pass,彻底跳过后续重定向逻辑
  • 移除无效分支:删除原有的617错误重定向逻辑,避免不必要的跳转
  • 简化正则:去掉原正则末尾多余的|,避免匹配空后缀的异常情况

内容的提问来源于stack exchange,提问作者Marisa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 17:27:51