Apache 强制 HTTP 全部跳转到 HTTPS

Apache 强制 HTTP 全部跳转到 HTTPS

网站建设Git开源网2019-09-27 17:44:05155A+A-

Apache 强制 HTTP 全部跳转到 HTTPS

.htaccess 在每一层独立服务根目录下都存在,例如:

全部网站根目录为 /var/www/html/.htaccess

gitoscc博客根目录位 /var/www/html/gitoscc-wordpress/.htaccess

gitoscc论坛根目录位 /var/www/html/gitoscc-discuz/.htaccess

gitoscc学习根目录位 /var/www/html/gitoscc-study/.htacces

HTTP 80 强制转 HTTPS

全站采用https协议访问,所以需要http重定向到https,只需要在.htaccess加入下面规则

在相应的网站根目录新建 .htaccess

例如,在gitoscc博客的网站根目录下,新建

vim   /var/www/html/gitoscc-wordpress/.htaccess
RewriteEngine OnRewriteCond %{SERVER_PORT} 80RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R,L]

或者

RewriteEngine OnRewriteCond %{HTTPS} !=onRewriteRule ^(.*) https://%{SERVER_NAME}/$1 [R,L]

强制301重定向 HTTPS

<IfModule mod_rewrite.c>RewriteEngine onRewriteBase /RewriteCond %{SERVER_PORT} !^443$RewriteRule (.*) https://%{SERVER_NAME}/$1 [R=301,L]</IfModule>

站点绑定多个域名

只允许www.gworg.com 跳转

RewriteEngine OnRewriteCond %{SERVER_PORT} 80RewriteCond %{HTTP_HOST} ^example.com [NC,OR]RewriteCond %{HTTP_HOST} ^www.example.com [NC]RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R,L]###把网址更改为自己的###

高级用法 (可选)

RewriteEngine on# 强制HTTPSRewriteCond %{HTTPS} !=on [OR]RewriteCond %{SERVER_PORT} 80# 某些页面强制RewriteCond %{REQUEST_URI} ^something_secure [OR]RewriteCond %{REQUEST_URI} ^something_else_secureRewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]# 强制HTTPRewriteCond %{HTTPS} =on [OR]RewriteCond %{SERVER_PORT} 443# 某些页面强制RewriteCond %{REQUEST_URI} ^something_public [OR]RewriteCond %{REQUEST_URI} ^something_else_publicRewriteRule .* http://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]

Apache mod_rewrite实现HTTP和HTTPS重定向跳转

当你的站点使用了HTTPS之后,你可能会想把所有的HTTP请求(即端口80的请求),全部都重定向至HTTPS(即端口443)。这时候你可以用以下的方式来做到:(Apache mod_rewrite)

把这段代码放在.htaccess文件,即可实现HTTP到HTTPS的重定向。

<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteCond %{SERVER_PORT} 80 RewriteRule ^(.*)$ https://blog.gitoscc.com/$1 [R=301,L]</IfModule>

而当你又想用回HTTP的时候,反过来就可以了:

<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteCond %{SERVER_PORT} 443 RewriteRule ^(.*)$ https://blog.gitoscc.com/$1 [R=301,L]</IfModule>

其中R=301表示Moved Permanently,即告诉搜索引擎或者浏览器下去直接访问后者的地址,

如果只是试验性地重定向,可以使用R=302(Found),临时跳转

更多30x状态,请见米扑博客:HTTP协议中POST、GET、HEAD、PUT等请求方法总结

VirtualHost 添加重定向

实测以上方法,对于我的需求场景,都无效

我的项目场景:

1、在我的根目录下 /var/www/htmp/

2、配置有多个网站,如米扑博客(/var/www/htmp/gitoscc-blog/)、米扑论坛(/var/www/htmp/gitoscc-forum/)、米扑学习(/var/www/htmp/gitoscc-study/)等

3、对于gitoscc博客的http请求,全部定向到https博客;对于gitoscc论坛的http请求,全部定向到https论坛;

最后,解决方案是在 VirtualHost 节点里,添加如下配置:

RewriteEngine onRewriteCond   %{HTTPS} !=onRewriteRule   ^(.*)  https://%{SERVER_NAME}$1 [L,R]

完整配置参数如下:

# blog<VirtualHost *:80>    ServerAdmin yanggang_2050@163.com    DocumentRoot /var/www/html/wordpress    ServerName blog.mimvp.com    RewriteEngine on    RewriteCond   %{HTTPS} !=on    RewriteRule   ^(.*)  https://%{SERVER_NAME}$1 [L,R]    DirectoryIndex index.php    ErrorLog /var/log/blog.gitoscc.com-error_log    CustomLog /var/log/blog.gitoscc.com-access_log common</VirtualHost>

在gitoscc论坛、米扑学习等 VirtualHost 节点里,都添加如上配置,问题解决。

gitoscc博客效果,全部自动跳转到 https :

https://blog.gitoscc.com


本文标题:Apache 强制 HTTP 全部跳转到 HTTPS
本文链接:https://gitoscc.com/?id=656
作者授权:除特别说明外,本文由 Git开源网 原创编译并授权 Git开源网_git开源代码资源网_git开源博客 刊载发布。
版权声明:本文不使用任何协议授权,您可以任何形式自由转载或使用。
点击这里复制本文地址以上内容由Git开源网整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!

支持Ctrl+Enter提交

Git开源网_git开源代码资源网_git开源博客 © All Rights Reserved.  
文章中出现的商标及图像版权属于其合法持有人,只供传递信息之用,非商务用途。本站所上传资源,只用于交流学习所用。本站资源收集于网络以及网友投稿,其版权归原创者所有,如有侵害到你的权益,或有不妥之处,请联系我们删除,敬请谅解。Email:admin#gitoscc.com(#更换成@)
Copyright © Git开源网 All rights reserved. 黑ICP备18006154号-1 由ZBlog驱动

网站管理