Apache开启重定向HTTP至HTTPS

网站启用了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虚拟站点配置。


评论

《 “Apache开启重定向HTTP至HTTPS” 》 有 2 条评论

  1. […] 首先要让.htaccess文件生效,具体就不再写了,不了解的参考这里:Apache开启重定向HTTP至HTTPS。 […]

  2. 写的很详细,感谢

发表评论