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

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

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

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

2
задан 26 February 2018 в 16:45
1 ответ

Но теперь моему сертификату нужен 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

1
ответ дан 3 December 2019 в 12:33

Теги

Похожие вопросы