Вопрос или проблема
У меня есть 2 веб-сайта с работающим https/ssl, но в некоторых браузерах, вводя URL без протокола, по умолчанию используется http, несмотря на то, что они поддерживают https. Я хочу, чтобы клиенты перенаправлялись на https только если их браузеры поддерживают это (поэтому обычное перенаправление .htaccess 301 не сработает, как и принуждение https через плагины WordPress).
Что я хочу, так это чтобы все запросы автоматически перенаправлялись на https, ЕСЛИ браузер это поддерживает – чтобы не принуждать https, когда он не поддерживается. (Добавление https -> http, когда https не поддерживается, было бы идеальным, но не обязательным, например для людей, которые приходят по ссылкам из поисковых систем – меня в основном интересуют люди на старых браузерах, вводящие адрес или добавившие его в закладки)
Весь код, который я видел до сих пор, предназначен для принуждения https (и запрещения http), например, через .htaccess.
Некоторые очень старые ответы, которые я видел, упоминали предзагрузку, но я не совсем понимаю, как это сделать, и не совсем ясно, почему некоторые браузеры, которые поддерживают https, по умолчанию используют http. (Https доступен уже как минимум 1-2 года).
Есть ли решения, которые предпочитают https, но также позволяют http, когда https невозможен?
Платформа – Linux общий хостинг. Один сайт на WordPress, другой html, который может перейти на WP в следующем году, интересно, есть ли решение с HSTS/заголовками или предзагрузкой? Субдоменов нет.
[Хотя я понимаю, что 0,1% до 0,01% трафика обычно поступает из браузеров, это для веб-сайта, существующего уже десятилетия, с многими людьми, которые преданно его используют со времен модемов с набором по телефону и телефонных кабелей.]
Я обычно не advocate за дизайн сайта с особенностями для конкретных браузеров, но в этом нишевом случае я думаю, что было бы полезно выяснить, какими конкретными браузерами пользуются эти отстающие, а затем нацелиться на них по user-agent.
Самый старый браузер, с которым у меня есть опыт, это Lynx (выпущен в 1992 году), и он все еще активно разрабатывается в 2024 году с полной поддержкой HTTPS, так что у меня возникает вопрос: Эти люди загружают ваши страницы, используя Telnet на матричном принтере? Они звонят? Какие исторические браузеры они на самом деле используют?
Как только вы определите (вероятно, три или четыре) браузера, которые используют эти пользователи, вы можете добавить это в ваше перенаправление HTTPS, чтобы нацелиться только на браузеры, которые не являются чрезвычайно старыми:
RewriteCond %{HTTP_USER_AGENT} !^(extremelyOldBrowser|extremelyOldBrowser2) [NC]
Ответ или решение
Для достижения цели "предпочитать HTTPS, но разрешить HTTP" при работе с веб-сайтами на платформе Linux (как на сайтах HTML, так и на WordPress), вы можете использовать комбинацию правил перенаправления в файле .htaccess
и получения информации о поддержке HTTPS из заголовков пользователя.
Шаги для настройки перенаправления
-
Определение версии браузера:
Чтобы понять, поддерживает ли браузер клиента HTTPS, вы можете использовать условие на основеHTTP_USER_AGENT
. Это позволяет проверить, использует ли посетитель действительно устаревший браузер. Пример кода для добавления в файл.htaccess
:RewriteEngine On # Условие для проверки пользовательского агента RewriteCond %{HTTP_USER_AGENT} !^(OldBrowser1|OldBrowser2) [NC] # Перенаправление на HTTPS RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Здесь
OldBrowser1
иOldBrowser2
– это идентификаторы старых браузеров, которые вы хотите исключить из перенаправления. Определите, какие браузеры ваши клиенты могут использовать, чтобы дополнить данный список. -
Настройка заголовков HSTS (HTTP Strict Transport Security):
Если вы уверены, что браузеры поддерживают HSTS, вы можете добавить заголовки в файл.htaccess
:Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains" env=HTTPS
Однако будьте осторожны с HSTS, так как одно неверное использование может заблокировать доступ для клиентов, использующих неподдерживаемые браузеры.
-
Настройка WordPress:
Если одна из ваших страниц работает на WordPress, вы можете добавить условие в файлfunctions.php
вашей темы:function prefer_https() { if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on') { return; // HTTPs is already in use } // Параметры для определения типа браузера. $old_browsers = array('OldBrowser1', 'OldBrowser2'); foreach ($old_browsers as $browser) { if (strpos($_SERVER['HTTP_USER_AGENT'], $browser) !== false) { return; // Устаревший браузер, используем HTTP } } // Перенаправление на HTTPS wp_redirect('https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], 301); exit; } add_action('template_redirect', 'prefer_https');
-
Обратная связь и анализ:
После настройки перенаправления рекомендуется отслеживать пользователи, которые используют устаревшие браузеры. Используйте инструменты аналитики (например, Google Analytics), чтобы понимать, как сильно это влияет на вашу аудиторию.
Примечания:
-
Кроссбраузерная совместимость: Не стоит забывать, что старые браузеры могут упускать поддержку современных стандартов HTTPS. Составьте список пользователей, которые, возможно, используют устаревшие браузеры. Это поможет при создании условий для исключений.
-
Побочные эффекты: Обратите внимание, что если увеличить подобные исключения, это может привести к небезопасности ваших данных, и вы должны удостовериться, что эта отдушина необходима.
Заключение:
Настройка сервера для предпочтительного использования HTTPS с сохранением поддержки HTTP может показаться сложной задачей, но правильное управление файлом .htaccess
и использование условий на основе заголовков пользователя позволят вам эффективно решать эту проблему. Гибкость в подходе к вашим пользователям – это ключ к удовлетворению их потребностей.