Força HTTPS com Load Balancer e sem (reescrita .htaccess)

3

Eu tenho o seguinte código como uma regra de reescrita.

RewriteEngine On 
RewriteCond %{HTTPS} off
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [R,L]

Isso parece funcionar muito bem com e sem um balanceador de carga terminado por SSL. Minha pergunta:

são as duas condições de reescrita "ORed" e Anded ". Se eu remover RewriteCond %{HTTPS} off recebo um redirecionamento infinito ao acessar o servidor da Web diretamente. (Preciso que isso funcione enquanto o DNS se propaga)

Estou apenas confuso com a regra

    
por Chris Muench 26.11.2013 / 12:45

1 resposta

2

O reescrito deve ser ou: como apenas uma das condições normalmente será verdadeira a qualquer momento. No entanto, isso precisaria de uma sintaxe adicional na forma da diretiva OR: Pode reduzir o rewriteRule para uma regra de múltiplos RewriteConds para 301 no htaccess?

O primeiro reescrito verifica se o protocolo usado pela conexão não é https. Se isso for resolvido como verdadeiro, um redirecionamento para https será enviado para o cliente.

O segundo reescrito verifica se o ssl já foi terminado (por exemplo, no balanceador de carga), no qual um cabeçalho http proto x-forwarded teria sido injetado com o valor de https. Se o valor do cabeçalho não for https, um redirecionamento para https será enviado ao cliente.

Remover a primeira condição ao conectar-se diretamente ao servidor resultará em um loop de redirecionamento.

A remoção da segunda condição durante a conexão através do balanceador de carga (ou qualquer nó externo que faça a terminação) também resultará em um loop de redirecionamento.

Eu tentaria (não testado como estou em um iphone):

RewriteEngine On 
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [R,L]
    
por 26.11.2013 / 13:14

Tags