随着互联网中超文本传输协议的更替,新一代经过加密更为安全的https逐渐普及,在apache服务器中该怎样将http协议的前缀网址自动跳转到https前缀呢?
首先我们需要分别在httpd.conf中配置80端口以及443端口:
80端口主要设置http协议
<VirtualHost *:80>
DocumentRoot "C:/gengmulu"
ServerName www.xxx.xxx
ServerAlias xxx.xxx
<Directory "C:/gengmulu">
Options FollowSymLinks Includes
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
而443端口设置的时
<VirtualHost *:443>
SSLEngine on
ServerName www.xxx.xxx
ServerAlias xxx.xxx
SSLCertificateFile "C:/公共密匙public.crt"
SSLCertificateKeyFile "C:/私人密匙.key"
SSLCertificateChainFile "C:/通用密匙chain.crt"
DocumentRoot "C:/gengmulu"
</virtualhost>
需要在apache中开启ssl模块,去掉LoadModule ssl_module modules/mod_ssl.so前面的#号.
然后我们可以在httpd.conf配置文件中开启apache2.4的重写模块mod_rewrite
新建空白的名称为.htaccess的文件,将其存放在网站的根目录中,天.htaccess重写代码如下:
<IfModule mod_rewrite.c>
Options +FollowSymlinks -Multiviews
RewriteEngine On
RewriteCond %{SERVER_PORT} !^443 [NC]
RewriteRule ^(.*)$ https://www.xxx.xxx/$1 [R=301,L]
</IfModule>
以上就可一实现在apache2.4的服务器环境下,http跳转到https,用正则判断端口不是443时自动跳转到https域名.
设置完成后可以使用ssl证书解析工具查看设置的https协议使用的ssl证书的相关属性.
$1表示匹配根目录下所有链接.
如果在[NC]中在添加个or或者的属性判断,与之前一篇跳转到www域名的文章内容结合一起:
代码如下:
<IfModule mod_rewrite.c>
Options +FollowSymlinks -Multiviews
RewriteEngine On
RewriteCond %{http_host} ^xxx.xxx [NC,OR]
RewriteCond %{SERVER_PORT} !^443 [NC]
RewriteRule ^(.*)$ https://www.xxx.xxx/$1 [R=301,L]
</IfModule>
设置完成后重启apache,我们就可以实现带http前缀自动跳转到https前缀网址,不带www的顶级域名跳转到带www的域名.