Мне сложно понять, как правильно настроить правило 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-запросы, которые я бы хотел предотвратить, но только для / ie. example.com
Затем я попробовал следующее:
RewriteCond %{HTTPS} !on [OR]
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^$ https://www.example.com [L,R=301]
Это (по-видимому) сработало, но оказалось, что все сторонние сайты мониторинга работоспособности заблокировали отправку HTTPS-запросов на получение, хотя в обычном браузере он работал нормально. Так что у меня нет идей.
Как оказалось, это действительно был случай, когда сторонние сайты мониторинга не следовали перенаправлениям должным образом, как было предложено @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/
Спасибо всем за ваш вклад. Очень признателен.