Условное перенаправление Apache HTTP на HTTPS

Условное перенаправление Apache HTTP на HTTPS

все. У меня проблема с синтаксисом. Я пробовал следовать другим источникам, но это просто не работает.

Я успешно создал безусловное перенаправление HTTP на HTTPS. Перейти кhttp://www.robjvargas.com, попадаем на HTTPS. Там все хорошо и хорошо.

Но теперь мой сертификат, похоже, требует HTTP. Он использует Let's Encrypt, поэтому его нужно обновлять каждые 90 дней. При включенном перенаправлении пробный запуск не удается. При выключенном перенаправлении пробный запуск проходит успешно.

Поэтому я попытался добавить RewriteCond, чтобы исключить трафик обновления сертификата:

# HTTP to HTTPS redirect
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteCond %{Request_URI} !^./acme-challenge/*
RewriteRule (.*) https://www.robjvargas.com$1 [R,L]

Только это не работает. Думаю, я упускаю что-то, за что стоит дать пощечину, когда увижу, но не вижу. С кодом выше перенаправление с HTTP на HTTPS все еще кажется универсальным. Так что, очевидно, RewriteCond неверен. Точка перед URI, вероятно, неверна, но я пробовал и с ней, и без нее.

Я также поместил полный URI в RewriteCond, но это тоже не исключило его.

Я близок. У меня нет никаких ошибок. Просто никогда не выполняется предполагаемое условие.

Что я упускаю?

решение1

Но теперь моему сертификату, похоже, нужен HTTP.

Это не совсем правильно. Лично я обновляю через https. Однако, чтобы это сработало, вам нужно разрешить доступ к URI вызова в вашем https VirtualHost, скопировав соответствующую часть из http VirtualHost. Если вы не можете или не хотите этого делать, вот как заставить это работать через http с условным перенаправлением, которое вы начали писать.

Проблема в том, что ваше текущее регулярное выражение будет соответствовать URI вызова. СогласноДокументация ApacheREQUEST_URI начинается с /, поэтому вам следует искать URI вызова следующим образом: ^\/\.well-known\/.*$. Это будет соответствовать URI вызова (http://example.com/.well-known/acme-challenge).

Все вместе:

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} !^\/\.well-known\/.*$
RewriteRule (.*) https://www.robjvargas.com/$1 [R,L]

В случае возникновения будущих проблем используйте это:тестер htaccess

решение2

На моем сервере Virtualmin сработала следующая строка.

RedirectMatch ^/(?!.well-known)(.*)$ https://phpmyadmin.example.com/$1

Связанный контент