all. У меня проблема с синтаксисом. Я пробовал следить за другими источниками, но это просто не работает.
Я успешно создал безусловное перенаправление 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 Docs 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 tester