如果 nginx conf 文件中的条件串联



我正在尝试在nginx conf文件中执行此操作,但它不起作用:

if ($scheme://$host = 'http://example.com') {
  return 301 https://example.com$request_uri;
}

那么如何在 if 条件下连接$scheme和$host呢?

使用临时变量很容易

set $tmp $scheme://$host;
if ($tmp = 'http://example.com') {
    return 301 https://example.com$request_uri;
}

我也在搜索如何使用Nginx的if和串联的字符串。我发现了这个问题,以及其他一堆文章说"如果邪恶",但没有提供替代品。

然后我遇到了这个问题,这让我想到了一个更加紧凑和优雅的解决方案 - 特别是当你需要多个if案例时,所以我会把它发布给其他搜索者。

map "$scheme://$host" $myVar {
    default 0;
    "http://example.com" 1;
    "~*(www.)?example" 1;
    # add more if needed
}

基本上,这会将第一行(串联$scheme://$host(的第一个参数与其他行的第一个参数(http://example.com文字,~*(www.)?example正则表达式不区分大小写,或默认default(进行比较,并将相应行的第二个参数(在我们的例子中10可以是任何东西(分配给作为第一行的第二个参数传递的变量($myVar(。

如果需要 10+ ifs,可以节省大量额外的代码行

最新更新