我试图在nginx配置文件中执行此操作,但它不起作用:
if ($scheme://$host = 'http://example.com') {
return 301 https://example.com$request_uri;
}
那么如何在if条件下连接$ scheme和$ host?
答案 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 }}(默认情况下),并将对应行中的第二个参数(在我们的情况下为default
或1
可以作为第一行中的第二个参数传递的变量({{1 }}。
如果需要10+ ifs,则可以节省很多额外的代码行