Htaccess перенаправляет для не-www как http, так и https

Я бы хотел:

  • http://example.com перенаправить на: http://www.example.com
  • https://example.com перенаправить на: https://www.example.com

И все, что есть http://whatever.example.com НЕ добавляет www как http://www.whatever.example.com.

Ответ 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-адресом, который был запрошен.

Ответ 2

Попробуйте добавить этот RewriteCond в ваш .htaccess файл, чтобы поймать только SSL - тогда сделайте то же самое для стандартного http.

RewriteCond %{HTTPS} on