Força SSL em uma página via .htaccess sem loop

1

Ok, eu tenho este código:

RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} ^/borrowing/ill/request\.php$
RewriteRule ^.*$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]

A maneira que eu esperaria que isso funcionasse é:

  1. Uma solicitação para /borrowing/ill/request.php é enviada em HTTP.
  2. A regra corresponde.
  3. O servidor redireciona para HTTPS.
  4. A regra não corresponde, porque o HTTPS agora está ativado.

A maneira como isso funciona é:

  1. Uma solicitação para /borrowing/ill/request.php é enviada em HTTP.
  2. A regra corresponde.
  3. O servidor redireciona para HTTPS.
  4. A regra corresponde.
  5. O servidor redireciona para HTTPS.
  6. A regra corresponde.
  7. O servidor redireciona para o HTTPS ...

E assim por diante.

Eu sei que a segunda condição (correspondente ao nome do arquivo) está funcionando, porque o loop de redirecionamento atinge apenas essa página específica. A questão é, por que a mudança para HTTPS não faz com que a primeira condição seja igual?

EDITAR:

Eu coloquei exatamente as mesmas regras de .htaccess em uma área de teste em outro servidor - o mesmo arquivo e informações de caminho. E eles trabalharam bem . Tem que haver algo errado com a configuração do servidor em outro lugar.

    
por Will Martin 23.06.2011 / 19:44

2 respostas

1

Acontece que não há nada errado com o código acima. O problema é que o servidor que eu estava executando está falando com um balanceador de carga que só se comunica na porta 80.

Assim, a solicitação HTTPS chega na porta 443, atinge o balanceador de carga, que a redireciona para a porta 80. Em seguida, o servidor da Web o redireciona de volta para 443, que é redirecionado para 80, para 443, para 80, para 443 ...

Assim, a solução é denunciá-lo à pessoa que mantém o balanceador de carga e esperar que ele possa descobrir isso.

Obrigado pela ajuda de qualquer forma, todos vocês foram muito pacientes.

    
por 24.06.2011 / 00:22
0

Se o domínio de destino for conhecido, tente o seguinte:

RewriteCond %{SERVER_PORT} !^443$
RewriteCond %{REQUEST_URI} ^/borrowing/ill/request\.php$
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L]
    
por 23.06.2011 / 20:30