Вопрос или проблема
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]
Пояснение изменений:
-
Проверка на
.well-known
:- Я изменил условие
RewriteCond %{REQUEST_URI} !/\.well\-known/?.*
наRewriteCond %{REQUEST_URI} !^/.well-known/ [NC]
, чтобы убедиться, что оно корректно исключает все запросы к пути.well-known
. Знак^
обозначает начало строки, а флаг[NC]
делает проверку нечувствительной к регистру.
- Я изменил условие
-
Исключение www и без www хостов:
- Условия были модифицированы для исключения только случаев, когда хост не равен
www.kashtata.com
илиkashtata.com
, и используя флаг[NC]
для нечувствительности к регистру.
- Условия были модифицированы для исключения только случаев, когда хост не равен
-
Перенаправление:
- Перенаправление теперь идет на
https://guesthouse.house/$1
, где$1
— это часть пути, которая была запрошена. Это гарантирует, что путь запроса сохраняется в перенаправлении.
- Перенаправление теперь идет на
Завершение
Теперь, после корректировок, ваш сервер должен обрабатывать все запросы HTTP и HTTPS, направляя их на указанный новый хост, кроме запросов к .well-known
, которые необходимы для работы инструмента Let’s Encrypt. Это должно решить проблему с выдачей сертификатов без ненужного перенаправления.
Убедитесь, что вы обновили ваш .htaccess
файл и протестировали его с помощью различных сценариев (HTTP на kashtata.com
, www.kashtata.com
, и HTTPS, чтобы гарантировать, что перенаправления работают корректно).