Como fazer o mod_rewrite do Apache redirecionar por HTTPS por padrão?

1

Digamos que eu tenha um website disponível por HTTPS, por exemplo, %código%. Considere o seguinte https://example.com/foo :

RewriteBase /
RewriteEngine On
RewriteRule ^foo$ bar [R=301,L]

Agora, quando visito .htaccess , ele redireciona para https://example.com/foo , sobre HTTP em vez de HTTPS.

Como faço para ir para HTTPS além de usar o esquema completo + host para cada http://example.com/bar com o RewriteRule sinalizador? Isso é o que eu faria depois:

RewriteBase /
RewriteEngine On
RewriteRule ^foo$ https://example.com/bar [R=301,L]

No entanto, meu arquivo R contém muitos desses .htaccess s, e parece que deve haver uma maneira de dizer ao Apache / mod_rewrite “reescrever para RewriteRule por padrão”. O que realmente estou procurando é uma diretiva para informar ao Apache que o site está usando HTTPS, semelhante a como se pode declarar o nome do host por meio de https:// . Isso é possível?

Acho que esta é uma pergunta semelhante no Stack Overflow: Como convencer o Apache do protocolo do cliente original

    
por Mathias Bynens 05.01.2016 / 16:31

3 respostas

3

ServerName também aceita um esquema, por exemplo %código%. Mudar isso na configuração e reiniciar o Apache resolveu o problema.

De a documentação :

Sometimes, the server runs behind a device that processes SSL, such as a reverse proxy, load balancer or SSL offload appliance. When this is the case, specify the https:// scheme and the port number to which the clients connect in the ServerName directive to make sure that the server generates the correct self-referential URLs.

    
por 22.01.2016 / 17:40
1

Esta é uma maneira de fazer isso:

RewriteEngine On

#redirect all your http trafic to https exept /foo & /bar
RewriteCond %{HTTP_HOST} ^example.com
RewriteCond %{HTTPS} !=on
RewriteCond %{REQUEST_URI} !(/foo|/bar)
RewriteRule (.*) https://example.com$1 [R=301,L]

#redirect /foo trafic to /bar
RewriteCond %{HTTP_HOST} ^example.com
RewriteCond %{REQUEST_URI} /foo
RewriteRule /foo(.*) http://example.com/bar$1 [R=301,L]

Coloque isso no seu httpd.conf, ou antes de todo o seu host virtual, e ele será aplicado a todas as solicitações iniciadas com example.com (www.example.com não será redirecionado)

Para aplicar a regra a todos os domínios, você pode remover a linha RewriteCond %{HTTP_HOST} ^example.com

Para obter informações, você deve evitar o uso do .htaccess, se possível, para impedir o acesso desnecessário ao disco rígido.

    
por 05.01.2016 / 16:50
0

Existe algum motivo para você não estar usando a diretiva simples Rewrite?

Rewrite / https://example.com/

Para sub-domínios, você pode fazer

Rewrite http://foo.example.com https://foo.example.com
    
por 06.01.2016 / 21:15