Ответ 1
Попробуйте следующее правило:
RewriteCond %{HTTP_HOST} ^[^.]+\.[^.]+$
RewriteCond %{HTTPS}s ^on(s)|
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Вот объяснение:
- Первое условие проверяет, имеет ли поле заголовка HTTP Host необходимый формат (содержит ровно один период).
- Второе условие проверяет, соответствует ли конкатенированное значение значения переменной HTTPS (значения
on
иoff
) иs
(так что либоons
, либоoffs
) равноons
и захватываетs
. Это означает, что если%{HTTPS}s
оценивается какons
, первая соответствующая группаs
и пустая в противном случае. - Правило будет соответствовать всем запросам, так как каждая строка имеет начало (помечена
^
) и перенаправляет их на оцениваемое значениеhttp%1://www.%{HTTP_HOST}%{REQUEST_URI}
, если оба условия истинны. Где%1
- первая соответствующая группа предыдущего условия (s
, если HTTPS и пустая в противном случае),%{HTTP_HOST}
является хостом HTTP запроса, а%{REQUEST_URI}
является абсолютным URL-адресом, который был запрошен.