在Apache上http强制跳转到https无效的解决办法

简介: 在Apache上http强制跳转到https无效的解决办法
前言

  公司官网备案,域名已经加了 https ,但是 http 访问会失败,需要强制跳转到 https 的页面上.这个官网实际上没什么内容就是一个静态的 html 页面加上几个图片和 css 样式,比较简单.之前 https 也是使用 Apache 来做的.

  我接下把配置失败的步骤和怎么解决(基本上都是网上别人写的博文和经验分享)这个问题的过程写一下,当然这种情况可能是个案,希望对大家有所启发.

失败的步骤

我的Apache版本是Apache/2.4.6,系统是CentOS.

网上大部分的经验分享无非以下两种方式

一. 在网站根目录添加 .htaccess 文件
  • 首先编辑httpd/conf/httpd.conf 去掉下面内容前面的#注释,使其生效
    (Apache 2.4.6 版的这个拓展貌似是已经被加载了,可以在 httpd/conf.modules.d/00-systemd.conf 文件中找到) .
LoadModule rewrite_module modules/mod_rewrite.so
  • 之后同样在conf/httpd.conf修改<Directory "/var/www/html">内容下的AllowOverride None 改为AllowOverride All
  • 然后在/var/www/html/目录(这个是网站的默认根目录,没有修改过,我的静态文件就放在下面 )下添加.htaccess文件
touch .htaccess

然后编辑文件

vi .htaccess

添加以下内容

RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R,L]

或者

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*) https://%{SERVER_NAME}/$1 [R,L]
  • 重启Apache
systemctl restart httpd.service
二. 直接在conf/httpd.conf 配置
  • 重复上面的第一、二步.<略>
  • conf/httpd.conf修改<Directory "/var/www/html">内容下添加以下内容
RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R,L]

或者

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*) https://%{SERVER_NAME}/$1 [R,L]
  • 重启Apache
systemctl restart httpd.service
成功的步骤

以上两种方式都无效.实在没办法,然后偶然间看到一个使用 tomcat 来替代 Apache 的方案.步骤如下:

  • 先把tomcat/webapps/ROOT/目录下除WEB_INF之外的文件清除
  • 再把静态资源移到tomcat/webapps/ROOT/
mv /var/www/html/* /opt/tomcat/webapps/ROOT/
  • WEB_INF/web.xml末尾添加以下内容
<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>

然后:wq 保存并退出

  • 启动Tomcat服务
tomcat/bin/startup.sh

前提是tomcat已经配置了SSL(https).

相关文章
|
1天前
|
安全 网络协议 算法
【计算机网络】http协议的原理与应用,https是如何保证安全传输的
【计算机网络】http协议的原理与应用,https是如何保证安全传输的
|
6天前
|
安全 Go
解决https页面加载http资源报错
请注意,混合内容可能导致安全性问题,因此在使用上述方法时要小心。最好的方式是尽量减少或完全消除混合内容,以确保页面的安全性。
8 0
|
11天前
|
网络协议 网络安全 数据安全/隐私保护
http和https的区别!
http和https的区别!
|
14天前
|
网络协议 安全 API
Android网络和数据交互: 什么是HTTP和HTTPS?在Android中如何进行网络请求?
HTTP和HTTPS是网络数据传输协议,HTTP基于TCP/IP,简单快速,HTTPS则是加密的HTTP,确保数据安全。在Android中,过去常用HttpURLConnection和HttpClient,但HttpClient自Android 6.0起被移除。现在推荐使用支持TLS、流式上传下载、超时配置等特性的HttpsURLConnection进行网络请求。
11 0
|
17天前
|
缓存 安全 网络协议
【面试必备】HTTP和HTTPS是什么?有什么差异?
HTTP(超文本传输协议)和HTTPS(超文本传输安全协议)是用于在互联网上传输数据的协议。它们都是应用层协议,建立在TCP/IP协议栈之上,用于客户端(如浏览器)和服务器之间的通信。
23 2
|
1月前
|
前端开发 应用服务中间件 网络安全
http转为https,ssl证书安装及nginx配置
http转为https,ssl证书安装及nginx配置
51 1
|
1月前
|
安全 数据安全/隐私保护
深入解析:HTTP和HTTPS的三次握手与四次挥手
在这些握手和挥手过程中,双方交换信息,协商参数,建立或关闭连接,以保证数据的可靠传输。HTTPS在此基础上加入了数字证书验证和加密通信,增加了安全性。这些步骤确保了HTTP和HTTPS协议的通信过程的稳定和安全。
117 0
|
1月前
|
前端开发
webpack如何设置devServer启动项目为https协议
webpack如何设置devServer启动项目为https协议
148 0
|
3月前
|
Web App开发 移动开发 JavaScript
Python网络编程(三),HTTP协议
Python网络编程(三),HTTP协议
62 0
|
1天前
|
网络协议 安全 算法
HTTP协议与HTTPS协议
HTTP协议与HTTPS协议

推荐镜像

更多