一切准备就绪开启了https但是http也能访问,影响了体验,该怎么解决http和https共存的问题呢?
我遇到的问题就是开启了强制https首页http任然可以访问,其余页面正常跳转https
寻找了半天貌似没有直接有效的方式,接下来分享一下所用的方法。
一个实用的.htaccess规则,将http访问强制指向https。只需将下面代码另存为.htaccess文件或者加入进去,传到网站根目录下即可。当然前提是你已经开通了.htaccess支持。如果不会的话,可以网上找找,很多这类教程的。
APache的.htaccess规则
RewriteCond %{SERVER_PORT} !^443$ RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R]
完整规则:
<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteCond %{SERVER_PORT} 80 RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R] </IfModule>
以上规则可以实现访问任意界面均指向https,灰常方便有效。
由此也可以实现将指定http界面转至https
RewriteCond %{SERVER_PORT} 80 RewriteCond %{HTTP_HOST} ^www.20sl.cn/test [NC] RewriteRule ^(.*)$ https://www.20sl.cn/test [R,L]
接下来分享几个常见常用多版本实现方式。
PHP页面转至https
if ($_SERVER["HTTPS"] <> "on") { $xredir="https://".$_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"]; header("Location: ".$xredir); }
通用http和https互转
适合指定某一个页面单独的http/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>
/*https转http*/ <script language="JavaScript" type="text/JavaScript"> function redirect() { var loc = location.href.split(':'); if(loc[0]=='https') { location.href='http:'+loc[1]; } } οnlοad=redirect </script>
Nginx环境
/*在配置80端口的文件里面,写入以下内容即可*/ server { listen 80; server_name localhost; rewrite ^(.*)$ https://$host$1 permanent; }
IIS 版本
IIs中实现Http自动转换到Https方法介绍 (403跳转对SEO有一定影响)
1、根据IIS版本备份以下文件:
IIS6.0 路径:C:WindowsHelpiisHelpcommon403-4.htm
IIS7.0以上 路径:C:inetpubcusterrzh-CN403.htm
2、把以下内容全部拷贝替换(403-4或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>
IIS6中,站点属性-》目录安全性-》编辑中把“要求安全通道(SSL)”勾选上即可。
IIS7、8中,SSL设置-》把“要求SSL”勾选即可
TOMCAT 版本
1、在conf目录下的server.xml文件中找到以下配置,修改redirectPort参数值为"443",默认是“8443”
<Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="443" />
2、在conf目录下的web.xml文件内容<web-app>……</web-app>中增加以下配置。
<web-app> ......... <security-constrAInt> <web-resource-collection > <web-resource-name >SSL</web-resource-name> <url-pattern>/*</url-pattern> </web-resource-collection> <user-data-constraint> <transport-guarantee>CONFIDENTIAL </transport-guarantee> </user-data-constraint> </security-constraint> </web-app>