Redirecionamento condicional do Apache HTTP para HTTPS

Redirecionamento condicional do Apache HTTP para HTTPS

todos. Eu tenho um problema de sintaxe. Tentei seguir outras fontes, mas simplesmente não está funcionando.

Criei com sucesso um redirecionamento incondicional de HTTP para HTTPS. Vá parahttp://www.robjvargas.com, acabe em HTTPS. Tudo muito bem aí.

Mas agora meu certificado parece precisar de HTTP. Ele está usando Let's Encrypt e, portanto, precisa de renovação a cada 90 dias. Com o redirecionamento em vigor, uma simulação falha. Com o redirecionamento desativado, a simulação é bem-sucedida.

Então tentei colocar um RewriteCond para isentar o tráfego de renovação do certificado:

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

Só que não funciona. Acho que estou perdendo algo digno de um tapa na testa quando vejo, mas não estou vendo. Com o código acima, o redirecionamento HTTP para HTTPS ainda parece universal. Então, claramente, o RewriteCond está incorreto. O período anterior ao URI provavelmente está errado, mas tentei com e sem ele.

Também coloquei o URI completo no RewriteCond, mas isso também não o isentou.

Estou perto. Eu não recebo nenhum erro. Simplesmente nunca atende à condição pretendida.

o que estou perdendo?

Responder1

Mas agora meu certificado parece precisar de HTTP.

isto não está correto. Estou renovando pessoalmente por https. Para que isso funcione, no entanto, você precisa permitir o acesso ao URI do desafio em seu https VirtualHost, copiando a parte relevante do http VirtualHost. Se você não pode ou não quer fazer isso, veja como fazê-lo funcionar em http com o redirecionamento condicional que você começou a escrever.

O problema é que seu regex atual corresponderia ao uri do desafio. De acordo comDocumentos Apacheo REQUEST_URI começa com / então você deve procurar o uri do desafio assim: ^\/\.well-known\/.*$. Isso corresponderá ao URI do desafio (http://example.com/.well-known/acme-challenge).

Todos juntos:

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

Em caso de problemas futuros, use isto:testador de htaccess

Responder2

No meu servidor Virtualmin, a linha a seguir resolveu.

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

informação relacionada