HTTP自动跳转HTTPS

PHP实现

刚刚给网站安装上了SSL证书,并且可以成功使用HTTPS进行访问。可一会儿就遇到了非常严重的问题,那就是在访问HTTP时并不会自动跳转至HTTPS。

于是我百度,Google了好久,都没能够找到适用于虚拟主机实现自动跳转的方法(如果是VPS的话就很简单,百度就有很多方法可以实现),不过后来我想到了一个方法,就是能不能通过在网站头部加入PHP代码实现自动跳转呢?

  • 终于让我在某博客找到了以下代码:
    <?php
     if ($_SERVER["HTTPS"] <> "on")
    {
        $xredir = "https://".$_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
        header("Location: ".$xredir);
    }
    ?>
  • 我抱着试试看的心态,直接将上面的代码添加至网站头部,令人惊喜的是,真的成功实现了自动跳转,而且是直接跳转,不会加载一会儿再跳转。

  • 最后说一下如何在Typecho、WordPress等中使用此方法:直接将上面的代码添加至你的模板里的header.php文件的顶部即可。

Apache Rewrite 实现

前两行是 www.abc.com 跳转到 abc.com , 后面是跳转为https链接。

RewriteEngine On
RewriteCond %{http_host} ^www.liyuans.com$ [NC]
RewriteRule ^(.*)$ https://liyuans.com/$1 [R=301,L]
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^(.*)?$ https://%{SERVER_NAME}/$1 [L,R]

Nginx 实现

  • 前提是https的443你已经启用,原来的就这么跳转就行
# Redirect all non-encrypted to encrypted

server {
    server_name          example.com;
    listen               *:80;
    listen               [::]:80;

    return 301 https://example.com$request_uri;
}

Tags: