阿里云虚拟主机使用 Typecho 1.1 开启HTTPS后无法登陆后台
解决方法:
编辑var/Typecho/Request.php,在isSecure方法中追加两个判断条件即可:
|| (!empty($_SERVER['HTTP_X_CLIENT_SCHEME']) && !strcasecmp('https', $_SERVER['HTTP_X_CLIENT_SCHEME']))
|| (!empty($_SERVER['REQUEST_SCHEME']) && !strcasecmp('https', $_SERVER['REQUEST_SCHEME']))
原因分析:
环境是阿里云CDN + 阿里云虚拟主机Nginx版,均开启了强制HTTPS,设置回源端口443,回源协议HTTPS。也有测试直接把域名解析到主机,问题仍然存在。
打开后台登陆页面会发现样式丢失,右击查看源代码发现加载样式的link
标签与提交表单的form
标签的地址都是http开头的,所以我猜测是Typecho没有检测到当前请求时HTTPS,所以输出了http链接导致浏览器不进行加载。而同样的配置在自己部署的宝塔面板上就不会出现这个问题。
经过一系列字符串搜索,找到判断是否为https的代码在var/Typecho/Request.php
的isSecure
方法中,主要是根据$_SERVER
的内容判断的,于是我注释掉原先的代码,写上return true;
保存测试,后台登陆节目生成的链接果然正常了。
定位了问题点就简单了,用print_r($_SERVER);exit();
输出服务器接收到的内容,再对比这里的判断代码,SERVER_PORT
被检测成了80,其他参数则是没有,难怪会检测错误。
观察发现多出了REQUEST_SCHEME
和HTTP_X_CLIENT_SCHEME
,加上对这两项的检测就好了