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