Apache HTTP 重定向 HTTPS

Apache HTTP服务器是世界上最受欢迎的Web服务器之一。这是一个开放源代码和跨平台的HTTP服务器,可为Internet的很大一部分网站提供支持

5 min read
By myfreax
Apache HTTP 重定向 HTTPS

Apache HTTP服务器是世界上最受欢迎的Web服务器之一。这是一个开放源代码和跨平台的HTTP服务器,可为Internet的很大一部分网站提供支持。

Apache提供了许多强大的功能,可以通过其他模块进行扩展。如果您是网站所有者或系统管理员,则很可能会定期与Apache打交道。

您可能要执行的最常见任务之一是将HTTP重定向HTTPS。与HTTP以纯文本形式发送和返回请求和响应不同,HTTPS使用TLS/SSL加密客户端和服务器之间的通信。

与HTTP相比,使用HTTPS有很多优点。所有数据都是双向加密的。因此,如果被拦截,则无法读取敏感信息。

Google Chrome浏览器和所有其他流行的浏览器都会将您的网站标记为安全。HTTPS允许您使用HTTP/2协议,

Google偏爱HTTPS网站。如果通过HTTPS提供服务,您的网站将排名更高。本教程说明如何在Apache中将重定向HTTP到HTTPS。

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

否则,您可以在域的.htaccess文件中设置重定向。一些控制面板,例如cPanel ,允许您通过单击几下鼠标来强制HTTPS重定向。

虚拟主机 HTTP 重定向 HTTPS

Apache虚拟主机定义一个或多个域的设置。在虚拟主机指令中,您可以指定站点文档根目录。

为每个站点创建单独的安全策略,使用不同的SSL证书,配置重定向等等。

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

在基于Red-Hat的发行版中,例如CentOS和Fedora,虚拟主机文件存储在/etc/httpd/conf.d中。

在Debian或者是基于Debian的Linux发行版,例如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版本。

VirtualHost *:80Apache服务器在监听端口80传入的连接。VirtualHost *:443 -Apache服务器在监听端口443 HTTPS传入的连接。

ServerNameServerAlias伪指令指定虚拟主机的域名。确保将其替换为您的域名。

Redirect permanent / https://example.com/将HTTP 重定向 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虚拟主机中的代码正在检查请求标头是否包含www,并重定向到非www版本。

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

在Debian和Ubuntu重启Apache服务的命令是sudo systemctl reload apache2。在CentOS和Fedora重启Apache服务的命令是sudo systemctl reload httpd

htaccess HTTP 重定向 HTTPS

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

通常,.htaccess文件位于站点根目录中,但是子目录中可以具有自己的.htaccess文件。

此方法要求将mod_rewrite模块加载到Apache服务器上。默认情况下,此模块在大多数服务器上都加载。

如果可以的话,最好在虚拟主机中创建重定向,因为它更简单,更安全。要将所有连接HTTP 重定向 HTTPS,请打开.htaccess文件,并向其中添加以下代码:

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://example.com/$1 [L,R=301]

RewriteEngine On启用重写功能。RewriteCond %{HTTPS} off检查HTTP连接,如果满足条件,则执行下一行。

RewriteRule ^(.*)$ https://example.com/$1 [L,R=301]使用状态代码301,将HTTP 重定向  HTTPS。

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

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

RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^www\.example\.com [NC]
RewriteRule ^(.*)$ https://example.com/$1 [L,R=301]

结论

在Apache中,将HTTP重定向到HTTPS的首选方法是在域的虚拟主机中配置301重定向。

如果您有任何疑问或反馈,请随时发表评论。