Я прочитал несколько ответов по SF, и я не приблизился к решению. Моя проблема кажется немного специфичной ...
Клиенты получали доступ к веб-серверу через порт 81. В связи с общей тенденцией к использованию HTTPS служба была обновлена и установлена на стандартный порт 443. Что важно для моей истории, HSTS включен на новом веб-сайте HTTPS.
На порт 81 ставим простое перенаправление Apache:
ServerName example.com
RewriteEngine on
RewriteCond %{SERVER_NAME} =example.com
RewriteRule ^ https://example.com/ [END,NE,R=permanent]
Это сработало. Доступ http://example.com:81 будет автоматически перенаправлен на https://example.com/
Однако благодаря HSTS он работает только один раз. Я полагаю, что многие пользователи получают доступ по ссылкам, закладкам, кэшированным поисковым запросам Google ... и автоматически перенаправляются на http://example.com:81. Даже функция автозаполнения в моем браузере по-прежнему предлагает ссылку: 81, так что я предполагаю, что я не единственный.
Их браузеры, имеющие действующую политику HSTS, выполняют внутреннее обновление небезопасного запроса, в результате чего браузер отправляет запрос на https://example.com:81. Не удается загрузить из-за ошибки SSL - порт не настроен для трафика SSL.
Поэтому мне нужен способ перенаправить http://example.com:81 И https://example.com:81 к https://example.com
Я видел Webmin при доступе через http://example.com:10000 выдать настраиваемое сообщение об ошибке об активности сайта по HTTPS, которое генерируется Webmin, а не браузером. Даже если бы я мог загрузить такую страницу и реализовать <meta>
обновите на новый URL-адрес, который по-прежнему будет радовать наших пользователей, пока старый URL-адрес воспроизводится и удаляется из ссылок, кешей и т. д.
Я исправил это, включив HTTPS на порту 81. Это сгенерировало ответ «400 Bad Request» при запросе версии HTTP (т. Е. первый время выполнения запроса до того, как HSTS сможет отменить запрос). Я настроил Apache для ответа на 400 ошибок перенаправлением:
ServerName example.com
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
RewriteEngine on
RewriteCond %{SERVER_NAME} =example.com
RewriteRule ^ https://example.com/ [END,NE,R=permanent]
ErrorDocument 400 https://example.com/
Это означает, что первые запросы направляются на сайт HTTPS с помощью перенаправления ошибок 400, а последующие запросы к нестандартному порту через HTTPS перенаправляются через RewriteRule
.
HTTP-запросы, отправляемые на HTTPS-порты, могут отображать сгенерированную сервером ошибку (именно поэтому Webmin может отображать «приятное» сообщение об ошибке). С другой стороны, HTTPS-запросы к HTTP-портам не могут генерировать ошибку, потому что браузер никогда не достигает точки установления канала связи.