为什么我的 Apache 重写规则将 http 重定向到 https 不起作用?

为什么我的 Apache 重写规则将 http 重定向到 https 不起作用?

我正在尝试制定一个通用的重写规则,以便所有 http 流量都重新路由到 https。

以下是配置中的松散部分

RewriteEngine On
   RewriteCond %{HTTPS} off
   RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]

但我仍然收到错误请求,我正在向启用 SSL 的服务器端口发送纯 HTTP 请求。我还尝试了条件

RewriteCond %{SERVER_PORT} !^443$

是因为重写规则必须包含在虚拟主机中吗?

答案1

问题在于 SSLEngine 是为整个服务器隐式开启的,因此端口 80 本身需要 https!我创建了一个通配符虚拟主机并关闭了引擎:

<VirtualHost *:80>
        SSLEngine Off
        TransferLog /var/log/apache2/http_access_log
        ErrorLog /var/log/apache2/http_error_log
        RewriteEngine On
        RewriteCond %{HTTPS} off
        RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>

相关内容