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

版权声明:转载请注明出处。 https://blog.csdn.net/tiantang_1986/article/details/81233659

前言

  公司官网备案,域名已经加了 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).

猜你喜欢

转载自blog.csdn.net/tiantang_1986/article/details/81233659