网站启用了SSL之后,需要使用HTTPS才能加密访问,默认还是可以通过明文的HTTP访问。但只要简单设置,就可以把HTTP请求重定向至HTTPS。
Apache开启重定向HTTP至HTTPS的方法有很多种,现在比较流行的是通过Mod_Rewrite实现。
首先启用Mod_Rewrite模块。
a2enmod rewrite
一种方法是修改HTTP虚拟站点配置文件。
打开HTTP虚拟站点配置文件,默认的话,Apache 2.4是/etc/apache2/sites-available/000-default.conf,而Apache 2.2是/etc/apache2/sites-available/default,在其中写入以下代码,把其他的内容都注释掉,就行了。
<VirtualHost *:80> RewriteEngine on RewriteCond %{HTTPS} !=on [NC] RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] </VirtualHost>
另一种方法是修改.htaccess文件。
首先要启用Override使.htaccess文件配置生效。
如果是Apache 2.4,修改Apache的配置文件。
vi /etc/apache2/apache2.conf
找到以下内容,修改其中的AllowOverride为All。
<Directory /var/www/> Options Indexes FollowSymLinks AllowOverride All Require all granted </Directory>
如果是Apache 2.2,修改Apache的网站配置文件,这里以默认的网站配置文件为例,先修改HTTP虚拟站点的配置文件。
vi /etc/apache2/sites-available/default
找到以下内容,修改其中的AllowOverride为All。
<Directory /var/www/> Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all </Directory>
再修改HTTPS虚拟站点的配置文件。
vi /etc/apache2/sites-available/default-ssl
作同样修改。
<Directory /var/www/> Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all </Directory>
之后就可以配置.htaccess文件了。
在网站根目录创建.htaccess文件,注意如果有子网站的话,子网站根目录也要创建。
vi /var/www/html/.htaccess
添加如下配置。
<IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{HTTPS} !=on [NC] RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] </IfModule>
更改.htaccess的所有者和组为www-data。
chown www-data:www-data /var/www/html/.htaccess
最后再重启一下Apache。
service apache2 restart
好了,去浏览器直接输入域名看看是不是可以自动跳转到HTTPS了。
其实,如果你是为WordPress开启重定向HTTP到HTTPS的话,还可以借助一款叫做Really Simple SSL的插件,根据提示做就行,非常方便,不过原理基本上是一样的。
最后,再说一说这两种方法的区别,第一种修改HTTP虚拟站点配置文件的方法,是针对该虚拟站点生效,访问该虚拟站点的HTTP请求都会被重定向到HTTPS。第二种修改.htaccess文件的方法,是针对.htaccess文件所在文件夹生效,访问该文件夹的HTTP请求会被重定向到HTTPS。具体还是要看需求而定,我两种方法都试过,现在比较偏向于修改HTTP虚拟站点配置。
发表评论