Разгар дня. Пальцы набивают код, глаза напряженно всматриваются в монитор, неподалеку гудит принтер, выплевывая бумагу, цокают каблучки, переговариваются бухгалтера, пахнет крепким кофе. Обычная рабочая обстановка.
И тут прибегает сисадмин. Глаза на выкате, самого потряхивает.
— Срочно! — говорит, — надо запретить на сайте компании протокол HTTP!
— Чего?, — поднимаю глаза от ровных строчек на экране.
— Юристы позвонили! Говорят нужно оставить только HTTPS!
Суть проблемы
В принципе, все к этому шло. Сразу скажу, что проблема решается тремя строчками в файле .htaccess, но об этом чуть ниже.
А суть в том, что в нашей стране есть закон о защите персональных данных. Мало того, что те кто их собирают (например, интернет-магазины, для оформления заказа) должны предупреждать покупателя. Предупреждать о том, что его ФИО, адрес, паспортные данные (если нужно), телефонный номер, e-mail и т.п. отправляются не просто так, а для обработки!
Мне всегда казалось, что это вообще-то логично. Иначе зачем я все это вписываю? Уж точно не для того, чтобы оно ушло в никуда. Но нет! Закон требует предупреждать.
Но и это еще не всё! Все отправляемые данные должны отправляться по шифрованному протоколу (HTTPS). Как говорится — приплыли.
Решение
Подивившись юридическим выкрутасам, зашел на сайт, открыл файл .htaccess и под строчкой RewriteEngine On, добавил еще три. Вот они:
RewriteCond %{HTTPS} off RewriteCond %{HTTP:X-Forwarded-Proto} !https RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Всё. Фокус сработал, поскольку протокол HTTPS уже был установлен. Просто теперь сайт будет доступен только по нему и не будет доступен по протоколу HTTP. В остальном, ничего не изменилось.
Кстати, если вы искали как отключить на сайте протокол HTTP (оставив только HTTPS) и вам помог этот рецепт, не стесняйтесь в благодарность заслать мне немного на чай с печеньками.))
Что касается самого HTTPS как явления…
Меня в этой ситуации напрягает лишь одно — навязывание HTTPS всем владельцам сайтов. Оно идет хоть и постепенно, но неуклонно.
Почему напрягает? Потому, что сертификат для этого протокола стоит денег. Это около 5000 руб (и выше) в год с нифига.
Т.е. к плате за хостинг и домены добавится еще и эта. Если расходы на первый и вторые, вполне обоснованы, то оплата сертификата — это «продажа воздуха».
Моя буйная фантазия запросто придумает еще десяток подобных вещей, за которые можно обязать платить веб-мастеров. Например, налог на сайт, или лицензия на использование трафика.
Это только кажется нереальным, а по факту вполне… Было бы желание. И все это, само-собой, будет исключительно для блага владельцев и посетителей сайтов.
UPDATE: Что делать, если нужно разрешить протокол HTTP только для конкретного IP?
Нужно к уже упомянутым трем строчкам добавить еще одну. При том добавить ее перед строкой с RewriteRule. Вот она.
RewriteCond %{REMOTE_ADDR} !92.57.214.12
Вы спросите: Зачем открывать HTTP-протокол для конкретного IP? Ведь HTTPS прогрессивнее, защищеннее, современнее, понтовее в коне-концов.
Дело в том, что к вашему сайту могут обращаться какие-нибудь ваши программы, парсеры и т.п., не умеющие общаться по HTTPS. Например 1C Бухгалтерия.
Конечно ее в итоге можно настроить, но не факт, что вы это сумеете своими силами или быстро, а работать надо вот уже прямо сейчас. На этот случай вас и выручит волшебная строчка.
Естественно, вместо 92.57.214.12 нужно указать нужный вам IP, с которого будете отправлять запросы.
Как сделать то же самое для IIS 7.5 ?
Без понятия. Никогда не было необходимости пользоваться этим… продуктом от незабвенной M$. Да и устарел IIS 7.5 уже лет десять как.
Благодарю, мне помогло.
Спасибо за комментарий)
Недоступность сайта по http считается ошибкой. Должно быть работающее перенаправление http -> https.
Все нормальные сайты, включая Google. так настроены.
Там и есть перенаправление))
Но вообще пост «слегка» устарел. Сейчас Апач используют всё реже, перенаправление с http -> https у многих хостеров можно включить прямо в админке хостинга, сертификаты Летс Энкрипт — бесплатны.
Пожалуй, пришло время написать новый пост на эту тему. Или нет…