本文主要与大家分享几种自动从http跳转到https的方法。 当您的站点使用 HTTPS 时,您可能希望将所有 HTTP 请求(即对端口 80 的请求)重定向到 HTTPS。 这时你可以通过以下方式进行:

启用https后,还需要保证之前的http端口可以打开。 http的80端口有两个URL,所以这就导致需要同时为带www和不带www的原域名指定一个https URL。 您需要执行两次 301 重定向。 这其实很简单。 夏天博客的方法是直接添加两个301到. 文件,如下图:

rewritecond %{http_host} ^www.php.cn [nc] 
RewriteRule ^(.*)?$ https://www.php.cn/$1 [R=301,L] 
RewriteCond %{SERVER_PORT} !^443$ 
RewriteRule ^(.*)?$ https://www.php.cn/$1 [R=301,L

第一个301自然是跳转到带www的新https,后面的301重定向是判断端口是否不是80,然后重定向。 这样的话,带www的域名和不带www的域名一起跳转到https URL就可以了。 当然,这种全站做301的方法是比较暴力的。 通常,我们只需要把主域名设为301即可。我这里是因为原来有两个域名。

PHP中文网还提供了其他一些从http跳转到https的方法,仅供参考:

方法1

RewriteEngine On 
RewriteBase / 
RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://www.php.cn/$1 [R=301,L]

方法二

RewriteEngine on 
RewriteCond %{SERVER_PORT} !^443$ 
RewriteRule ^(.*)?$ https://%{SERVER_NAME}/$1 [R=301,L]#整站跳转

方法三

RewriteEngine on 
RewriteBase /yourfolder 
RewriteCond %{SERVER_PORT} !^443$ 
#RewriteRule ^(.*)?$ https://%{SERVER_NAME}/$1 [R=301,L] 
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]
#以上至针对某个目录跳转, yourfolder就是目录名

方法4

redirect 301 /你的网页 https://你的主机+网页
#至针对某个网页跳转

方法5

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

解释:

%{SERVER_PORT} ―― 访问端口
%{REQUEST_URI} ―― 比如如果url是 http: //localhost/tz.php,则是指 /tz.php
%{SERVER_NAME} ―― 比如如果url是 http: //localhost/tz.php,则是指 localhost

上面的规则意味着如果访问的url的端口不是443并且访问的页面不是tz.php,那么就会应用这条规则。

这实现了:

当访问或等页面时页面访问自动转跳www,会自动跳转到或,但访问时,不会跳转页面访问自动转跳www,也就是说和这两个地址都可以访问。

PS:接下来我们看一下从http自动跳转到https的方法。 具体内容如下:

修改根目录。 文件


 Options +FollowSymlinks
 RewriteEngine On
#thinkphp去掉index.php
 RewriteCond %{REQUEST_FILENAME} !-d
 RewriteCond %{REQUEST_FILENAME} !-f
 RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
 #http自动跳转到https
 RewriteCond %{SERVER_PORT} !^443$
 #只有匹配对应的域名才会跳转
 RewriteCond %{SERVER_NAME} ^hrsc.cc|www.hrsc.cc$
 RewriteRule (.*) https://%{SERVER_NAME}/$1 [R]

总结