如何在运行 Apache2 的 Ubuntu 上将所有网站流量重定向到 HTTPS

如何在运行 Apache2 的 Ubuntu 上将所有网站流量重定向到 HTTPS

所以我有一个运行 Apache 2 的 Ubuntu 服务器,并希望将所有流量重定向到 https。以下是 sites-available 配置文件(已替换域名)。

<VirtualHost *:80>
    ServerName example.com
    ServerAlias www.example.com
    Redirect permanent "/" "https://example.com/"
</VirtualHost>

<VirtualHost *:443>
 ServerAdmin [email protected]
 DocumentRoot /var/www/personal/html/
 ServerName https://example.com
 ServerAlias https://www.example.com

    <IfModule mod_headers.c>
            Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains; preload"
    </IfModule>

 <Directory /var/www/personal/html/>
    Options +FollowSymlinks
    AllowOverride All
    Require all granted
      <IfModule mod_dav.c>
        Dav off
      </IfModule>
    SetEnv HOME /var/www/personal/html
    SetEnv HTTP_HOME /var/www/personal/html
 </Directory>

 ErrorLog ${APACHE_LOG_DIR}/personal-error.log
 CustomLog ${APACHE_LOG_DIR}/personal-access.log combined

 ServerAlias example.com
 SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
 SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
 Include /etc/letsencrypt/options-ssl-apache.conf
 </VirtualHost>

https://example.com确实有效并且已加密。如何重写配置以将所有流量重定向到 https?

答案1

您的问题已经有了答案:这可以实现您想要实现的目标:

<VirtualHost *:80>
    ServerName example.com
    ServerAlias www.example.com
    Redirect permanent "/" "https://example.com/"
</VirtualHost>

然而,ServerNamehttps://example.com是错误的:你不应该在这里或在你的ServerAlias。这是<VirtualHost *:443>一个使它成为 HTTPS 虚拟主机的指令。如果您曾经https://example.com使用此配置,可能是因为您ServerAlias example.com在配置中也使用了该指令,但您也不应该在同一个<VirtualHost>块中两次指定这些指令。

这让我怀疑这个sites-available配置文件是否曾经是用户的,即

  • 您是否已启用它(使用a2ensite或通过手动创建符号链接sites-enabled)?
  • 修改之后,您是否重新启动了 Apache?

(顺便说一句,由于http://www.example.com重定向到规范https://example.com/,因此重定向https://www.example.com/到同一位置也可能是一个好主意。)

相关内容