昨天在测试小程序的一个功能,小程序存在一个内置的webview页面,测试中,发现访问webview页面变成了http链接, 小程序的域名校验就没通过。
在PC浏览器上单独去访问webview的URL,我发现页面访问有这么一个过程。
页面路径为: www.example.com/webview?abc…
浏览器地址栏经历了以下的变化:
1. www.example.com/webview?abc…
2. www.example.com/webview/?ab…
3. www.example.com/webview/?ab…
从2-->3的变化,分析了一下原因,是因为web页面里有一段对http跳转https的代码。这段代码发现当前页面url是http的,就跳转到https的url去。2-->3的变化是web页面代码里发生的。
小程序里导致域名校验不通过,问题处在1-->2的变化中。分析是在nginx里存在重定向跳转导致的。
nginx的配置情况是这样的
server {
listen 80;
listen 443 ssl;
server_name www.example.com;
...
location /webview {
alias /webview;
try_files $uri $uri/ /webview/index.html;
}
}
nginx配置是同时支持http 和https访问的。
当访问 www.example.com/webview?abc…
最开始的 uri/ , 这个重定向的时候,是nginx执行的,因为nginx配置同时支持了http和https, 而且http的优先级更高。这就发生了 重定向去 $uri/的时候,url变成了 www.example.com/webview/?ab… 。这就是浏览器地址栏从1-->2的变化过程。
解决方法,具体的配置如下
server {
listen 80;
listen 443 ssl;
server_name www.example.com;
# 设置相对url重定向
absolute_redirect off;
...
location /webview {
alias /webview;
try_files $uri $uri/ /webview/index.html;
}
}
这样配置之后,就不再出现https 重定向到http的过程了。
问题解决!