宝塔面板开启 HTTPS 强制跳转后实现指定目录不强制跳转 HTTPS 教程

已关闭留言

文章目录
隐藏
前言
方案
说明

前言

虽然使用 HTTPS 更加安全,但在一些特定情况下却只能使用 HTTP 不能使用 HTTPS,在宝塔面板中开启 HTTPS 强制跳转后全站都会跳转到 HTTPS,并没有例外的选项,本来以为加一条 if 指定条件不跳转就行了,结果不能实现,原来 Nginx 不支持 if 逻辑和嵌套语法,最后找了不少资料,终于可以实现开启强制跳转后指定目录不跳转 HTTPS 的方案了。

方案

宝塔面板开启强制跳转 HTTPS 后 Nginx 的配置文件是如下代码:

    if ($server_port !~ 443){
    rewrite ^(/.*)$ https://$host$1 permanent;
}

然后我们在 网站-设置-配置文件 中用以下代码替换掉上面的代码即可;

    set $flag 0;
if ($server_port !~ 443) {
    set $flag "${flag}1";
}
if ($request_uri !~ "/ONE"){
    set $flag "${flag}2";
}
if ($flag = "012"){
     rewrite ^(.*)$  https://$host$1 permanent;
}

代码解释:满足非443端口,并且域名目录非 /ONE 时跳转,包含 /ONE 目录不跳转。

说明

我们指定不跳转的目录是 /ONE 但如果有同名目录,比如 /ONEA/ONEBB 同样也不会跳转。

参考:https://cloud.tencent.com/developer/article/1606873