Назад | Перейти на главную страницу

Условное перенаправление 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, но это тоже не исключало его.

Я близок Я не получаю ошибок. Это просто никогда не соответствует предполагаемому состоянию.

Что мне не хватает?

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

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

Проблема в том, что ваше текущее регулярное выражение будет соответствовать вызову uri. Согласно Документы Apache REQUEST_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