我正在尝试将来自某些国家/地区的所有流量重定向到一个集中页面(2023 年秋季系列),但另一个页面(商店定位器)除外。我的重定向工作是指所有页面都重定向到
fall-2023-collection
,包括 store-locator
。我已经尝试了 if/elseif/else 的多种条件组合,但我没有运气让 store-locator
按预期加载。
这就是我为
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);
}
georedirect
只是一个包含两个字母国家代码的表格,因此它并不真正相关。该部分按预期工作。我使用 VPN 进行了验证,所以这不是我遇到的主要问题。
Fastly Fiddle 是帮助您调试此类问题的绝佳工具:
https://fiddle.fastly.dev/
我用它来生成一个工作示例:
https://fiddle.fastly.dev/fiddle/be5f942f
在链接的小提琴中,我发出五个请求:
/anything/the-intended-destination?beep=boop
/anything/dont-redirect-this-either?=fizz=buzz
/anything/foo
/anything/bar
/anything/baz
第一个请求应该刚刚到达目的地。
第二个请求应该刚刚到达目的地。
第三个、第四个和第五个请求应重定向到
/anything/the-intended-destination
。
我没有实现表查找,正如您提到的这对您有用,因此我所做的主要更改是从
req.url
切换到 req.url.path
,因为后者不包含查询字符串参数。
传入请求中的任何查询字符串参数都会导致您的检查(使用
req.url
)失败。
如果您以后对 Fastly 有任何疑问或问题,请随时联系以下任何人员...
注意: 就官方 Fastly 支持而言,上面的列表按重要性降序排列(即,在发布到 Stack Overflow 时,您会得到最少的关注/反馈)。因此,我建议在官方社区论坛中提问,或者更好的是,发送电子邮件至 Fastly 支持。