Como redirecionar o tráfego para http

1

Eu tenho um servidor apache sob um proxy que pode executar HTTPS. Em vez de enviar o cabeçalho HTTPS = on, ele envia HTTP_X_FORWARDED_PROTO = https.

Eu quero escrever uma regra de .htaccess que redirecione todas as solicitações de https para http, a menos que a URL seja / user / login.

O que eu tenho é em torno dessas linhas (que faz um loop infinito):

RewriteCond %{HTTP:http_x_forwarded_proto} !http
RewriteRule ^ http://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
    
por Eduard Luca 15.10.2012 / 20:01

2 respostas

3

O problema com sua regra de redirecionamento é provavelmente que você esteja duplicando o prefixo "http_". Isso não deveria ser necessário. Se você tiver um proxy reverso na frente do seu servidor (como um F5 ou nginx), o cabeçalho será "X-Forwarded-Proto", ou algumas vezes "X-Forwarded_Proto". Para referenciá-los em uma regra de reescrita, use% {HTTP: Nome-do-cabeçalho} (o caso não é sensível).

Para a reescrita mais robusta que funciona em todas as situações, use algo assim:

# Make sure all SSL pages for dot-com are redirected to HTTP.
RewriteCond %{SERVER_PORT} 443 [OR]
RewriteCond %{HTTPS} on [OR]
RewriteCond %{HTTP:X-Forwarded-Proto} https [OR]
RewriteCond %{HTTP:X-Forwarded_Proto} https
RewriteRule (.*) http://%{HTTP_HOST}/$1 [R=301,L]

Mais detalhes sobre como usar cabeçalhos em RewriteCond são dados na documentação do mod_rewrite do Apache .

    
por 07.02.2013 / 07:59
1

Eu acho que o problema com sua condição inicial é que você tem! http em vez de! = http. Isso pode corrigir o loop infinito.

    RewriteEngine On
    RewriteCond %{HTTP:http_x_forwarded_proto} !=http
    RewriteCond %{REQUEST_URI} !^/user/login.*
    RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Isso deve tomar qualquer solicitação https que não seja / user / login e reescrevê-la para http. Tenho certeza de que há uma maneira mais elegante de fazer isso, no entanto. Você poderia se livrar de RewriteCond% {HTTP: http_x_forwarded_proto}! = Http e provavelmente funcionaria tão bem, por exemplo, já que deveria receber qualquer requisição entregue que não inclua / user / login e redirecioná-lo para http.

    
por 15.10.2012 / 21:01