版权声明:转载请注明出处。 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).