перенаправление без www на www И http на https ТОЛЬКО для корневого пути

перенаправление без www на www И http на https ТОЛЬКО для корневого пути

Мне сложно понять, как правильно настроить правило mod_rewrite для следующих условий:

  • перенаправление без www на www И http на https ТОЛЬКО для корневого пути: / т.е. example.com
  • игнорируйте все остальное, например /test.html, например example.com/test.html

Обратите внимание, что я пишу правила в файлах Apache, включаемых в правила каталога.

Вот чем я сейчас пользуюсь:

RewriteCond %{HTTP_HOST} ^[^.]+\.[^.]+$
RewriteCond %{HTTPS}s ^on(s)|
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Это правильно перенаправляет все запросы без www на www, но также позволяет выполнять HTTP-запросы, которые я хотел бы запретить, но только для /, то есть example.com

Затем я попробовал следующее:

RewriteCond %{HTTPS} !on [OR]
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^$ https://www.example.com [L,R=301]

Это (по-видимому) сработало, но оказалось, что это заблокировало все сторонние сайты мониторинга времени безотказной работы, чтобы они не выдавали HTTPS-запросы get, хотя в обычном браузере все работало нормально. Так что у меня нет идей.

решение1

Как оказалось, это действительно был случай, когда сторонние сайты мониторинга не следовали перенаправлениям должным образом, как и предполагал @MrWhite. Я решил это, отредактировав путь мониторинга для проверки напрямую через протокол HTTPS, тем самым избежав перенаправлений.

Правило перезаписи в конце концов оказалось верным, и я в итоге использовал его только для корневого пути, включенного в директивы Apache для каждого сервера каталогов:

RewriteCond %{HTTPS} !on [OR]
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^$ https://www.example.com [L,R=301]

Кстати, для тех, кто испытывает трудности с правилами htaccess/mod_rewrite, вот замечательный онлайн-инструмент, который очень помог мне в тестировании:https://htaccess.madewithlove.be/

Спасибо всем за ваш вклад. Очень признателен.

Связанный контент