RewriteRule соответствует только части URL-адреса после хоста и порта (в контексте VirtualHost) или по относительному пути файловой системы (в контексте Directory / htaccess);поэтому попытка сопоставить имя хоста в RewriteRule не будет работать.
Однако %{HTTP:Host}
даст вам заголовок Host
HTTP, так что RewriteCond может сопоставить его с:Недостатком является то, что mod_rewrite заметит, что вы перезаписываете в зависимости от заголовка HTTP, и добавит заголовок Vary: Host
.Если вы не хотите этого, вы можете сначала сохранить его в переменной и выполнить RewriteCond для этой переменной:
RewriteRule . - [E=HTTP_HOST_NO_VARY:%{HTTP:Host}]
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteCond %{ENV:HTTP_HOST_NO_VARY} =example.com
RewriteRule .? https://%{HTTP_HOST}%{REQUEST_URI} [R]