REC

PHP实现客户端HTTPS协议强制退回到HTTP状态

易航
3年前发布 /正在检测是否收录...

前言

网上有很多HTTP升级为HTTPS的方法,但是让客户端所有用户从HTTPS退回HTTP的有效方法却很少。为了自己站点能够退回HTTP,我也是折腾了很长时间才想出来这个方法。
废话不多说,直接上本人自己研究出来的方法

HTTPS退回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同样进行无感跳转网页。

© 版权声明
本站用户发帖仅代表本站用户个人观点,并不代表本站赞同其观点和对其真实性负责。
转载本网站任何内容,请按照转载方式正确书写本站原文地址。
THE END
喜欢就支持一下吧
点赞 8 分享 赞赏
评论 抢沙发
取消 登录评论