Estou tentando rolar minha própria configuração vhost para lidar com certbot/letsencrypt. Desejo redirecionar qualquer coisa que não seja solicitações para /.well-known para HTTPS. Mas a exceção para .well-known não está funcionando; solicitações para http://www.example.com/.well-known/ retornam um redirecionamento 301 para https. Eu anonimizei o nome do host no código abaixo.
Observe que me deparei com esta postagem / resposta antes de postar aqui - e a resposta aceita lá descreve (acredito) a primeira das configurações que tentei abaixo - o que me faz pensar que não é uma duplicata.
<VirtualHost *:80>
DocumentRoot "/var/www/html"
ServerName www.example.com
RewriteEngine on
RewriteCond %{HTTPS} !=on
# RewriteRule ^(\.well-known) - [END]
RewriteCond %{REQUEST_URI} !^\.well-known
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
# additional auth config elsewhere, hence....
<Location /.well-known/ >
Require all granted
</Location>
</VirtualHost>
Conforme indicado pela linha comentada acima, também tentei:
RewriteRule ^(\.well-known) - [END]
# RewriteCond %{REQUEST_URI} !^\.well-known
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
Não há nenhum arquivo .htaccess no caminho, mas só para ter certeza, desativei todas as instruções de reescrita e obtive respostas HTTP 200 para /.well-known/ e outras solicitações. Estou testando usando curl -I
o cache do navegador de 301 não é uma consideração. Após cada alteração, executei uma reinicialização completa do httpd, não apenas uma recarga.
Este é httpd-tools-2.4.6-99 no Centos 7.
Como posso substituir um redirecionamento padrão?
Você está perdendo o principal
/
, ou seja, você está usando!^\.well-known
em vez de!^/\.well-known
. Provavelmente seria melhor adicionar o tailing/
, também, para corresponder ao conteúdo desse diretório sozinho:!^/\.well-known/
.Ainda assim, o exemplo da resposta de Daniel Ferradal é uma maneira mais correta de conseguir o mesmo.
Por outro lado, como isso é para o desafio HTTP-01 do Let's Encrypt , você não precisaria dessa condição:
Eu tentaria fazer de forma mais simples.
Com mod_alias carregado (sem necessidade de mod_rewrite no seu exemplo, eu costumo não usar mod_rewrite a menos que seja realmente necessário) e também uso diretório e não localização para caminhos de diretório reais, também não há necessidade de citar caminhos.
Acredito que um exemplo muito mais simples faria o que você deseja: