在nginx配置文件中,如果条件串联是什么意思?

3
我正在尝试在nginx配置文件中实现此功能,但无法生效:
if ($scheme://$host = 'http://example.com') {
  return 301 https://example.com$request_uri;
}

那么我怎样才能在if条件中连接$scheme和$host?
2个回答

3
用临时变量很容易实现。
set $tmp $scheme://$host;
if ($tmp = 'http://example.com') {
    return 301 https://example.com$request_uri;
}

2
我也在搜索如何使用Nginx的if与串联字符串。我找到了这个问题和一堆其他文章说“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个以上的if语句,则可以节省大量额外的代码行。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接