htaccess force https não funciona se não houver um URI

Oct 03 2020

Nunca trabalhei com o Apache, então sou um novato.

Eu tenho uma conta de multihosting em um site de provedor, onde 3 domínios são usados. Quero forçar a conexão https em um domínio, digamos example.com, que não é o domínio principal do plano de hospedagem. O que fiz foi adicionar um .htaccessarquivo no path examplecom/public_html, a pasta onde estão todos os arquivos do site. No .htaccessCopiei e colei estas strings do guia do provedor:

RewriteEngine on
RewriteBase /
RewriteCond %{HTTPS} !on
RewriteRule (.*) https://www.example.com%{REQUEST_URI} [L,R=301]

O site funciona corretamente se eu acessar uma página com um URI não vazio, mas não funciona na página principal. Por exemplo: http://example.com/anypageé redirecionado corretamente para https://www.example.com/anypage, enquanto http://example.com/é redirecionado para https://www.example.com/public_htmle não consegue entender o porquê.

Respostas

3 MrWhite Oct 03 2020 at 07:24

Parece que há um conflito com as diretivas existentes, no entanto, você pode tentar alterar as diretivas existentes para ver se isso faz diferença:

RewriteEngine On

RewriteCond %{HTTPS} !on
RewriteRule (.*) https://www.example.com/$1 [L,R=301]

Desde que o .htaccessarquivo esteja localizado no examplecom/public_htmldiretório, a referência anterior capturada ( $1) deve conter apenas o que vier depois disso (se houver). Considerando que a REQUEST_URIvariável do servidor sempre contém o caminho URL completo.

A RewriteBasediretiva é supérflua aqui, pois você está usando um URL absoluto na RewriteRule substituição .

Você precisará limpar o cache do navegador antes de testar, pois o 301 incorreto provavelmente foi armazenado em cache. Teste com redirecionamentos 302 (temporários) para evitar problemas de cache.