Ну ... %{HTTP_HOST}
переменная будет преобразована только в доменное имя, и в вашем примере это будет просто www.mydomain.com
. Вам нужно больше, чем это:
Options +FollowSymLinks -MultiViews
RewriteEngine on
# force secure version of this page
RewriteCond %{QUERY_STRING} ^page_id=(\d+) [NC]
RewriteCond %{HTTPS} =off
RewriteCond %{HTTP_HOST} =www.mydomain.com
RewriteRule ^(.*)$ https://www.mydomain.com/$1?page_id=%1 [R=301,L]
Вы должны сравнить строку запроса, протокол и, необязательно, доменное имя отдельно с помощью 3 операторов RewriteCond.
Я удалил /$1
из целевого URL - это не имеет смысла. Все, что должно сделать это правило, - это перенаправить на защищенную версию этого и только одного этого конкретного URL.
Я не уверен, что эта строка действительно необходима: RewriteCond %{HTTP_HOST} =www.mydomain.com
. Без него должно нормально работать.
Убедитесь, что вы поместили это правило в соответствующее место - оно должно быть помещено ДО Правила переписывания WordPress.
UPDATE:
Альтернатива:
Options +FollowSymLinks -MultiViews
RewriteEngine on
# force secure version of this page
RewriteCond %{QUERY_STRING} ^page_id=(\d+)(.*) [NC]
RewriteCond %{HTTPS} =off
RewriteCond %{HTTP_HOST} =www.mydomain.com
RewriteRule ^(.*)$ https://www.mydomain.com/$1 [QSA,R=301,L]