网站http强制跳转https方法

Nginx服务器

在配置80端口的文件里面写入以下内容,重启Nginx即可生效。

server {
    listen       80;
    server_name  localhost;
    rewrite ^(.*)$ https://$host$1 permanent;      #老版Nginx的rewrite重定向方法
    #return 301 https://$server_name$request_uri;  #新版Nginx推荐无条件301跳转方法

    location / {
        root   html;
        index  index.html index.htm;
    }
}

rewrite指令根据表达式来重定向URL,或者修改字符串,可以应用于server,location,if环境下,每行rewrite指令最后跟一个flag标记,支持的flag标记有如下表格所示:

Flag 作用
last 本条规则匹配完成后,停止匹配,再匹配后面的规则(因为重新发送了一次请求)
break 本条规则匹配完成后,停止匹配,不再匹配后面的规则(404)
redirect 返回302临时重定向,地址栏会显示跳转后的地址
permanent 返回301永久重定向,地址栏会显示跳转后的地址(默认)

说明:return不支持正则,所以不支持复杂的重定向;return需要指定状态码,rewrite不需要指定状态码。

Apache服务器

i.如果需要整站跳转,则在网站的配置文件的<Directory>标签内,键入以下内容:

RewriteEngine on
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^(.*)?$ https://%{SERVER_NAME}/$1 [L,R]

ii.如果对某个目录做https强制跳转,则复制以下代码:

RewriteEngine on
RewriteBase /yourfolder
RewriteCond %{SERVER_PORT} !^443$
#RewriteRule ^(.*)?$ https://%{SERVER_NAME}/$1 [L,R]
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R]

iii.如果只需要对某个网页进行https跳转,可以使用redirect 301来做跳转!

redirect 301 /你的网页 https://你的主机+网页

IIS服务器

考虑403跳转对SEO有一定影响,因此可以采用302重定向方法实现http自动转换到https。

1、根据IIS版本,备份以下文件。

  • IIS6.0备份路径:C:\WINDOWS\Help\iisHelp\common\403-4.htm
  • IIS7.0以上路径:C:\inetpub\custerr\zh-CN\403.htm

2、把以下内容全部拷贝替换(403-4或403)里面所有内容,保存即可(修改之前先备份403文件)

<HTML>
<HEAD>
    <TITLE>该页必须通过安全通道查看</TITLE>
    <META HTTP-EQUIV="Content-Type" Content="text/html; charset=GB2312">
</HEAD>

<BODY>
    <script type="text/javascript">
        var url = window.location.href;
        if (url.indexOf("https") < 0) {
            url = url.replace("http:", "https:");
            window.location.replace(url);
        }
    </script>
</BODY>
</HTML>

3、勾选网站要求SSL通道访问

  • IIS6版本:站点属性->目录安全性->编辑中把“要求安全通道(SSL)”勾选;
  • IIS7、8版:SSL设置勾选“要求SSL”即可;
  • 备注:如果IIS上面有多个站点,恢复以上操作,然后使用下面的“单页面跳转通用代码”。

LAMP或者LNMP集成环境跳转

首先在网站根目录下创建.htaccess文件,如果目录下已经有.htaccess文件,则用vi或者其他编辑器打开,在最下面添加写入如下语句即可。

RewriteEngine on
RewriteBase /
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R]

单独页面通用代码段

以下方法较适合指定某一个子页单独https,如果网页定义了top或者boot文件,可以在这个文件里面加入。

# 在需要强制为https的页面上加入以下代码来处理http–>https
<script type="text/javascript">
    var url = window.location.href;

    if (url.indexOf("https") < 0) {
        url = url.replace("http:", "https:");
        window.location.replace(url);
    }
</script>

单独页面PHP页面跳转

将以下代码添加到网站php页面:

if ($_SERVER["HTTPS"] <> "on")
{
    $xredir="https://".$_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
    header("Location: ".$xredir);
}

参考文章:

https://www.lnmp.org/faq/lnmp-nginx-301-rewrite.html

作者: Hugh

Welcome to Wan's world~