我正在尝试在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
(进行比较,并将相应行的第二个参数(在我们的例子中1
或0
可以是任何东西(分配给作为第一行的第二个参数传递的变量($myVar
(。
如果需要 10+ ifs,可以节省大量额外的代码行