Объединение двух директив.htaccess в один

44
3

У меня есть две директивы в моем корневом файле.htaccess.

Цель первого - перенаправить все не-www-запросы на www:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^example\.com$ [NC]
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]

Цель второго - перенаправить все запросы без SSL на SSL:

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [R,L]

Есть ли способ объединить их в одну директиву.htaccess?

спросил(а) 2018-05-11T15:39:00+03:00 1 год, 6 месяцев назад
1
Решение
56

Вы можете использовать следующее правило для принудительного использования как https и www в одном запросе:

RewriteEngine on

RewriteCond %{HTTPS} !=on [OR]
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$
RewriteRule ^.*$ https://www.%1%{REQUEST_URI} [R,L]

Обратите внимание, что вышеприведенное правило также перенаправляет поддомены на https. Если вы не хотите, чтобы правило применялось к поддоменам, вы можете исключить их, используя условие перезаписи. Поместите следующую строку над директивой RewriteRule, если у вас есть поддомены

RewriteCond %{HTTP_HOST} !^(sub1\.domain\.com|sub2.domain.com)$ 

Полный код

RewriteCond %{HTTPS} !=on [OR]
RewriteCond %{HTTP_HOST} !^www\. [NC]
#exclude sub.example.com
RewriteCond %{HTTP_HOST} !^sub\.example.com$
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$
RewriteRule ^.*$ https://www.%1%{REQUEST_URI} [R,L]

ответил(а) 2018-05-11T17:35:00+03:00 1 год, 6 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема