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

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

Hackeus
2022-10-16 / 0 评论 / 21 阅读 / 正在检测是否收录...

前言

网上有很多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同样进行无感跳转网页。

0

评论

博主关闭了所有页面的评论