如何在 Apache 上将 HTTP 重定向到 HTTPS?

How to Redirect HTTP to HTTPS on Apache?

环境:Ubuntu 使用 Apache。

正在尝试设置从 http 到 https 的自动重定向。

我试过:

<VirtualHost *:80>
    RewriteEngine On
    RewriteCond %{HTTPS} !=on
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
</VirtualHost>

<VirtualHost *:443>
    SSLEngine on
    SSLCertificateFile    <path to your crt file>
    SSLCertificateKeyFile   <path to your private key file>

    # ...
</VirtualHost>

    RewriteEngine on
    ReWriteCond %{SERVER_PORT} !^443$
    RewriteRule ^/(.*) https://%{HTTP_HOST}/ [NC,R,L]

从 mydomain.com --- 到 ---> (https://) mydomain.com

有什么想法吗?

首先根据本教程创建虚拟主机:
Apache Web server - Setting Up Virtual Hosts

其次,您可以创建一个 Let's encrypt 证书,如果您使用 certbot,它将自动配置您的 Apache 并进行重定向:
How To Secure Apache with Let's Encrypt on Ubuntu 18.04

我用这个代码

<VirtualHost *:80>
    ServerName foo.com
    ServerAlias www.foo.com

    <IfModule mod_rewrite.c>
    RewriteEngine on

    RewriteRule ^ - [E=protossl]
    RewriteCond %{HTTPS} on
    RewriteRule ^ - [E=protossl:s]

    RewriteCond %{HTTPS} !=on
    RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

    </IfModule>

</VirtualHost>

确保您可以通过 HTTP 和 HTTPS 访问您的网站。还要确保 mod_rewrite 已启用,然后您可以将这些行添加到您的 .htaccess 文件中。

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