如果nginx conf文件中的条件连接

时间:2018-04-16 23:50:15

标签: nginx

我试图在nginx配置文件中执行此操作,但它不起作用:

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

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

2 个答案:

答案 0 :(得分:0)

使用临时变量很容易

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

答案 1 :(得分:0)

我也在搜索如何将Nginx的if与串联字符串一起使用。我找到了这个问题,还有其他一些文章说“如果是邪恶的”,但没有提供替代品。

然后我遇到了this question,这使我想到了一个更为紧凑和优雅的解决方案-尤其是当您需要多个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 regex不区分大小写或{{1 }}(默认情况下),并将对应行中的第二个参数(在我们的情况下为default1可以作为第一行中的第二个参数传递的变量({{1 }}。

如果需要10+ ifs,则可以节省很多额外的代码行