本文介绍使用Apache Virtual Host将HTTP重定向到HTTPS、及使用.htaccess文件将HTTP重定向到HTTPS的方法,以下方法仅适合在Apache服务器中。
前言 在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重定向。
相关主题 |