作为程序员一定要保持良好的睡眠,才能好编程

网站 http 强制跳转 https 方法

发布时间:2018-10-31


接上文   


阿里云支持https请求配置  http://new.xiaosongit.com/article/504.html


Nginx支持Https协议 http://new.xiaosongit.com/article/503.html



其实我们配置好 https以后,直接输入域名并不能直接跳转到 https上去,除非把https:// 这个也输入上,才可以正常跳转。


如何直接输入域名强制跳转到 https?


第一种方法:利用497错误端口跳转


当网站只允许https访问时,当用http访问时nginx会报出497错误码

配置中 需要监听两个端口

指定 497 跳转地址

server {
        listen       80; #处理http请求过来
        listen       443; #处理https
        ssl on;
        #证书
        ssl_certificate /data/www/smallnews/ssl/cert-1540869161424.crt;
        #私钥
        ssl_certificate_key /data/www/smallnews/ssl/cert-1540869161424.key;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;
        fastcgi_param HTTPS on;
        fastcgi_param HTTP_SCHRMR https;
      

        access_log /data/www/smallnews/httpsaccess.log;

        server_name sp.xi******; #域名
                
        #当网站只允许https访问时,当用http访问时nginx会报出497错误码
        error_page 497 https://$host$uri?$args;
        
}


以上配置完成后,重新启动nginx 


第二种方法:网站添加了https证书后,当http方式访问网站时就会报404错误,所以需要做http到https的强制跳转设置.


这种做法,必须是需要两个conf配置文件,一个配置 80 端口的  一个配置 443 的

当端口不一样的时候,同一个域名  nignx是不会报错的。



配置1:
server {
    listen 80;  //这里监听的是80 切记
    server_name sp.xi******;
    index index.html index.php index.htm;
   
    access_log  /data/www/smallnews/access.log main;
    error_log  /data/www/smallnews/error.log;
     
    rewrite ^(.*)$  https://$host$1 permanent;        //这是ngixn早前的写法,现在还可以使用。
  
    location ~ / {
    root /data/www/smallnews;
    index index.html index.php index.htm;
    }
}


#看看https 443 端口如何配置
server {
        
        listen       443; #处理https
        ssl on;
        #证书
        ssl_certificate /data/www/smallnews/ssl/cert-1540869161424.crt;
        #私钥
        ssl_certificate_key /data/www/smallnews/ssl/cert-1540869161424.key;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;
        fastcgi_param HTTPS on;
        fastcgi_param HTTP_SCHRMR https;
      

        access_log /data/www/smallnews/httpsaccess.log;

        server_name sp.xi******; #域名 同 80端口域名保持一致
                
       
        
}


有了以上的两个步骤,重新启动ngixn 服务器 。

-------------------------------------------------------

上面的跳转配置rewrite ^(.*)$  https://$host$1 permanent;

也可以改为下面

rewrite ^/(.*)$ http://dev.wangshibo.com/$1 permanent;

或者

rewrite ^ http://dev.wangshibo.com$request_uri? permanent;

-------------------------------------------------------


配置2 

server {
    listen 80;
    server_name sp.xi******;
    index index.html index.php index.htm;
  
 
    return      301 https://$server_name$request_uri;      //这是nginx最新支持的写法
  
    location ~ / {
    root /data/www/smallnews;
    index index.html index.php index.htm;
    }
}


配置443 

server {
        
        listen       443; #处理https
        ssl on;
        #证书
        ssl_certificate /data/www/smallnews/ssl/cert-1540869161424.crt;
        #私钥
        ssl_certificate_key /data/www/smallnews/ssl/cert-1540869161424.key;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;
        fastcgi_param HTTPS on;
        fastcgi_param HTTP_SCHRMR https;
     
        access_log /data/www/smallnews/httpsaccess.log;

        server_name sp.xi******; #域名 同 80端口域名保持一致
                        
}

其实和第一种方法就差

return      301 https://$server_name$request_uri;      //这是nginx最新支持的写法



配置3:这种方式适用于多域名的时候,即访问wangshibo.com的http也会强制跳转到https://dev.wangshibo.com上面
server {
    listen 80;
    server_name dev.wangshibo.com wangshibo.com *.wangshibo.com;
    index index.html index.php index.htm;
   
    access_log  /usr/local/nginx/logs/8080-access.log main;
    error_log  /usr/local/nginx/logs/8080-error.log;
     
    if ($host ~* "^wangshibo.com$") {
    rewrite ^/(.*)$ https://dev.wangshibo.com/ permanent;
    }
  
    location ~ / {
    root /var/www/html/8080;
    index index.html index.php index.htm;
    }
    }
 
 
配置4:下面是最简单的一种配置
server {
    listen 80;
    server_name dev.wangshibo.com;
    index index.html index.php index.htm;
   
    access_log  /usr/local/nginx/logs/8080-access.log main;
    error_log  /usr/local/nginx/logs/8080-error.log;
     
    if ($host = "dev.wangshibo.com") {
       rewrite ^/(.*)$ http://dev.wangshibo.com permanent;
    }
 
    location ~ / {
    root /var/www/html/8080;
    index index.html index.php index.htm;
    }
    }



--------------------------------------------

以上是nginx配置说明

--------------------------------------------




--------------------------------------------

Apache配置说明

--------------------------------------------

Apache服务器:


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


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


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


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


如果只需要对某个网页进行https跳转,可以使用redirect 301来做跳转!redirect 301  /你的网页 https://你的主机+网页



--------------------------------------------

单独页面PHP页面跳转:

--------------------------------------------


添加在网站php页面内


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