云网牛站
所在位置:首页 > Linux云服务器 > 在Apache中使用Virtual Host和.htaccess将HTTP重定向到HTTPS

在Apache中使用Virtual Host和.htaccess将HTTP重定向到HTTPS

2020-01-02 11:37:27作者:戴进稿源:云网牛站

本文介绍使用Apache Virtual Host将HTTP重定向到HTTPS、及使用.htaccess文件将HTTP重定向到HTTPS的方法,以下方法仅适合在Apache服务器中。

在Apache中使用Virtual Host和.htaccess将HTTP重定向到HTTPS

 

前言

在Apache中,有几种方法可以重定向到HTTPS,如果您具有运行Apache的Linux服务器的超级用户访问权限,则首选方法是在域的虚拟主机配置文件中设置重定向,否则,您可以在域的.htaccess文件中设置重定向。

某些控制面板(例如cPanel)使您可以通过单击几下鼠标来强制HTTPS重定向。

如果你使用的是阿里云虚拟主机,请参考阿里云虚拟主机支持HTTPS了,附开启方法

 

使用Virtual Host将HTTP重定向到HTTPS

Apache虚拟主机(Apache Virtual Hosts)定义服务器上托管的一个或多个域的设置,在虚拟主机指令中,您可以指定站点文档根目录(包含网站文件的目录),为每个站点创建单独的安全策略,使用不同的SSL证书,配置重定向等等。

通常,当在域上安装SSL证书时,您将对该域具有两个虚拟主机指令,第一个用于80端口的站点的HTTP版本,另一个用于443端口的HTTPS版本。

在基于Red Hat的发行版(例如CentOS和Fedora)中,Virtual Host文件存储在/etc/httpd/conf.d中,在Debian及其衍生版本(如Ubuntu)上时,文件存储在/etc/apache2/sites-available目录中。

要将网站重定向到HTTPS,请使用Redirect指令,如下例所示:

<VirtualHost *:80> 

 ServerName example.com

 ServerAlias www.example.com

 Redirect permanent / https://example.com/

</VirtualHost>

<VirtualHost *:443>

 ServerName example.com

 ServerAlias www.example.com

 Protocols h2 http:/1.1

 # SSL Configuration

 # Other Apache Configuration

</VirtualHost>

让我们解释一下代码。我们使用的是两个虚拟主机指令,一个用于HTTP,一个用于HTTPS版本的站点。

1、VirtualHost *:80-Apache服务器在80端口(HTTP)上侦听指定域的传入连接。

2、VirtualHost *:443-Apache服务器在443端口(HTTPS)上侦听指定域的传入连接。

ServerName和ServerAlias指令指定虚拟主机的域名,确保将其替换为域名。

HTTP虚拟主机中突出显示的行Redirect permanent / https://example.com/将流量重定向到站点的HTTPS版本。

通常,您还希望将站点的HTTPS www版本重定向到非www,反之亦然,这是一个示例配置:

<VirtualHost *:80> 

 ServerName example.com

 ServerAlias www.example.com

 Redirect permanent / https://example.com/

</VirtualHost>

<VirtualHost *:443>

 ServerName example.com

 ServerAlias www.example.com

 Protocols h2 http:/1.1

<If "%{HTTP_HOST} == 'www.example.com'">

 Redirect permanent / https://example.com/

</If>

 # SSL Configuration

 # Other Apache Configuration

</VirtualHost>

HTTPS虚拟主机内的代码(即以上的Redirect permanent / https://example.com/、<If "%{HTTP_HOST} == 'www.example.com'"> Redirect permanent / https://example.com/</If>)正在检查请求标头是否包含www域并重定向到非www版本。

每当您对配置文件进行更改时,都需要重新启动或重新加载Apache服务,以使更改生效。

如果是在Debian和Ubuntu下,运行:

sudo systemctl reload apache2 

如果是在CentOS和Fedora下,运行:

sudo systemctl reload httpd

 

使用.htaccess将HTTP重定向到HTTPS

.htaccess是Apache Web服务器基于目录的配置文件,该文件可用于定义Apache如何从放置文件的目录中提供文件,以及启用/禁用其他功能。

通常,.htaccess文件位于域根目录中,但是您可以在子目录中拥有其他.htaccess文件。

此方法要求将mod_rewrite模块加载到Apache服务器上,默认情况下,此模块在大多数服务器上加载,如果可能的话,最好在虚拟主机中创建重定向,因为它更简单、更安全。

要将所有HTTP通信重定向到HTTPS,请打开根.htaccess文件,并向其中添加以下代码:

RewriteEngine On

RewriteCond %{HTTPS} off

RewriteRule ^(.*)$ https://example.com/$1 [L,R=301]

以上代码是什么意思,如下解释:

1、RewriteEngine On-启用重写功能。

2、RewriteCond %{HTTPS} off-检查HTTP连接,如果满足条件,则执行下一行。

3、RewriteRule ^(.*)$ https://example.com/$1 [L,R=301]-将HTTP重定向到状态代码为301的HTTPS(永久移动),确保更改域名。

下面的示例还有一个附加条件,用于检查请求是否以www开头,使用它强制所有访问者使用网站的HTTPS非www版本:

RewriteCond %{HTTPS} off [OR]

RewriteCond %{HTTP_HOST} ^www\.example\.com [NC]

RewriteRule ^(.*)$ https://example.com/$1 [L,R=301]

编辑.htaccess文件时,无需重新启动服务器,因为Apache会在每个请求中读取该文件。

 

结论

在Apache服务器中,将HTTP重定向到HTTPS的首选方法是在域的虚拟主机(Virtual Host)中配置301重定向。

 

相关主题

在Nginx服务器中将HTTP重定向到HTTPS的方法

精选文章
热门文章