下文转自loc的 ukmg,本文记录备用。
起因:
看到有坛友发帖询问,如何让主域名自动跳转https,但是某个目录例如/123 不强制跳转 https
思路:
第一印象的直接添加额外一条规则,失败了。。 原因。nginx的配置中不支持if条件的逻辑与/逻辑或运算 ,并且不支持if的嵌套语法
替代方案:
set $flag 0;
if ($server_port !~ 443) {
set $flag "${flag}1";
}
if ($request_uri !~ "123"){
set $flag "${flag}2";
}
if ($flag = "012"){
rewrite ^(.*)$ https://$host$1 permanent;
}
解释:满足非443 端口 并且 域名目录 非/123 时跳转
替换掉宝塔原来的:
if ($server_port !~ 443){
rewrite ^(/.*)$ https://$host$1 permanent;
}
测试:
http://tst.picp.men 跳转
http://tst.picp.men/123 不跳转