我正在尝试制定一个通用的重写规则,以便所有 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>