前言
网上有很多HTTP升级为HTTPS的方法,但是让客户端所有用户从HTTPS退回HTTP的有效方法却很少。为了自己站点能够退回HTTP,我也是折腾了很长时间才想出来这个方法。
废话不多说,直接上本人自己研究出来的方法
实现方法
首先要在站点部署一个错误的SSL证书,如果无证书或证书正确会陷入301跳转循环!
然后在网站的入口文件最上方放入一段代码
<?php
if ($_SERVER['HTTPS'] == 'on') {
if ($_COOKIE['HTTPS']) {
?>
<script type="text/javascript">
var targetProtocol = "http:";
if (window.location.protocol != targetProtocol) {
window.location.href = targetProtocol + window.location.href.substring(window.location.protocol.length)
}
</script>
<?php
exit('请使用http协议访问本站');
}
if (!$_COOKIE['HTTPS']) {
setcookie("HTTPS", true, time() + 3600);
}
sleep(1);
$url = "http://" . $_SERVER["SERVER_NAME"] . $_SERVER["REQUEST_URI"];
header('HTTP/1.1 301 Moved Permanently');
header('Location:' . $url);
}
?>
原理总结
浏览器检测到错误的SSL证书就不会让站点强制HTTPS,没有了强制HTTPS我们就可以进行跳转到HTTP协议状态,但是只用301重定向这种方式会无限循环,导致浏览器检测到301重定向过多返回错误码。那么我们就只把301重定向给到搜索引擎来看,这种代码的写法不用专门检测是不是搜索引擎,避免误判之类的情况,给到用户这边用JS同样进行无感跳转网页。
评论