.redirect everything to https or new vhost except letsencrypt?

Вопрос или проблема

RewriteEngine On
RewriteCond %{REQUEST_URI} !/\.well\-known/?.* [OR]
RewriteCond %{HTTP_HOST} ^(www.)kashtata\.com$ [OR]
RewriteCond %{HTTP_HOST} ^(?:www\.)kashtata\.com$ [OR]
RewriteCond %{HTTP_HOST} ^kashtata\.com$ [OR]
RewriteCond %{https} off
RewriteRule ^(.*)$ https://guesthouse.house%{REQUEST_URI} [L,R=301]

У меня есть следующий код .htaccess. Он должен перенаправлять http://example.com на https://NEWexample.com и https://example.com на https://NEWexample.com (например, если какой-то пользователь решит ввести явно https://example.com, вместо того чтобы просто ввести example.com или сохранить как закладку). Это должно происходить с любым запросом, кроме letsencrypt (так как мне нужно, чтобы он выдал сертификат для example.com, чтобы https:// работал).

Я добавил строку well-known, которая должна обслуживать http://kashtata.com/.well-known (letsencrypt), но вместо этого она перенаправляется на guesthouse.house с тем же URI запроса, который нужен letsencrypt. Есть идеи, чего мне не хватает?

Использую Apache 2.4.

Ответ или решение

Для решения вашей задачи с перенаправлением всего трафика на HTTPS или новый виртуальный хост, исключая запросы, связанные с Let’s Encrypt, ваш файл .htaccess должен быть правильно настроен для обработки этих условий. Давайте разберем ваш текущий код и внесем необходимые правки.

Исправленный код .htaccess

RewriteEngine On

# Исключаем .well-known для Let's Encrypt
RewriteCond %{REQUEST_URI} !^/.well-known/ [NC]
# Исключаем также www даже на HTTP
RewriteCond %{HTTP_HOST} !^www\.kashtata\.com$ [NC]
RewriteCond %{HTTP_HOST} !^kashtata\.com$ [NC]
# Убедимся, что запрос не является HTTPS
RewriteCond %{HTTPS} off

# Перенаправляем на новый хост
RewriteRule ^(.*)$ https://guesthouse.house/$1 [L,R=301]

Пояснение изменений:

  1. Проверка на .well-known:

    • Я изменил условие RewriteCond %{REQUEST_URI} !/\.well\-known/?.* на RewriteCond %{REQUEST_URI} !^/.well-known/ [NC], чтобы убедиться, что оно корректно исключает все запросы к пути .well-known. Знак ^ обозначает начало строки, а флаг [NC] делает проверку нечувствительной к регистру.
  2. Исключение www и без www хостов:

    • Условия были модифицированы для исключения только случаев, когда хост не равен www.kashtata.com или kashtata.com, и используя флаг [NC] для нечувствительности к регистру.
  3. Перенаправление:

    • Перенаправление теперь идет на https://guesthouse.house/$1, где $1 — это часть пути, которая была запрошена. Это гарантирует, что путь запроса сохраняется в перенаправлении.

Завершение

Теперь, после корректировок, ваш сервер должен обрабатывать все запросы HTTP и HTTPS, направляя их на указанный новый хост, кроме запросов к .well-known, которые необходимы для работы инструмента Let’s Encrypt. Это должно решить проблему с выдачей сертификатов без ненужного перенаправления.

Убедитесь, что вы обновили ваш .htaccess файл и протестировали его с помощью различных сценариев (HTTP на kashtata.com, www.kashtata.com, и HTTPS, чтобы гарантировать, что перенаправления работают корректно).

Оцените материал
Добавить комментарий

Капча загружается...