.htaccess reescrever http para resultados https em loop

5

Em um servidor apache 2.2 executando verniz, estou tentando redirecionar http - > para https por um Drupal inteiro Commons ( link ).

Como o verniz armazena alguns redirecionamentos (R = 301, mas não R = 302, eu acho que, primeiro eu tenho o meu redirecionamento trabalhando em: 8080 que não é servido por verniz.

O código .htaccess abaixo redireciona com sucesso http: // foo.example.com:8080 para https: // foo.example.com. (Trabalho no Chrome, FF e Safari.)

# RewriteBase /

### Standard Drupal7 .htaccess above here  ###

# SSL REWRITES
RewriteCond %{SERVER_PORT} ^8080$
RewriteRule ^(.*)$ https://foo.example.com/$1 [NC,R=302,L]

### Standard Drupal7 .htaccess below here  ###

# Rewrite URLs of the form 'x' to the form 'index.php?q=x'.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !=/favicon.ico
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
</IfModule>

Se eu

  1. Alterar 8080 no acima para 80
  2. salve o .htaccess
  3. reiniciar o verniz
  4. limpe o cache do Drupal
  5. limpe o cache do navegador
  6. visite http: // foo.example.com

(Eu religiosamente fiz o acima após cada edição para .htaccess.)

Eu recebo um loop de redirecionamento no Chrome, FF, Safari quando visito http: // foo.example.com.

Em um esforço para entender o loop, alterei o redirecionamento da seguinte forma:

# SSL REWRITES
RewriteCond %{SERVER_PORT} ^80$
RewriteRule ^(.*)$ https://foo.example.com/$1/%{SERVER_PORT} [NC,R=302,L]

e eu tenho isso na minha barra de localização: https: // foo.example.com/80/80/80/80/80/80/80/80/80/80/80/80/80/80/80/80/80/80/80/80/ 80

Quando o navegador é encaminhado para a URL https, não deve SERVER_PORT = 443 ???

Alterar para R = 301 resulta no mesmo loop.

Testar% {HTTPS} resulta no mesmo loop.

# SSL REWRITES
#RewriteCond %{SERVER_PORT} ^80$
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://foo.example.com/$1/%{HTTPS} [NC,R=301,L]

agora eu recebo isso na minha barra de localização: https: // foo.example.com/off/off/off/off/off/off/off/off/off/off/off/off/off/off/off/off/off/off/off/off/ off

Por link (e link ) Eu também tentei:

# SSL REWRITES
RewriteCond %{SERVER_PORT} ^80$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ https://foo.example.com/$1/%{SERVER_PORT} [NC,R=301,L]

Tentei com e sem o! negação de -f e -d. De qualquer maneira, o condição não corresponde, então nada acontece. Eu não sei porque estes -f, -d testes seriam necessários ....

Eu também tentei remover a substituição da expressão regular no RewriteRule

# SSL REWRITES
RewriteCond %{SERVER_PORT} ^80$
RewriteRule ^.*$ https://foo.example.com/ [R=301,L]

isso ainda resulta em um loop.

Qualquer ajuda seria muito apreciada.

    
por Brian Wood 06.01.2012 / 04:16

1 resposta

1

Descobri dos administradores do servidor que eles encerram SSL com o Pound neste servidor. O que isso significa é que o SSL funciona, mas as variáveis HTTP_SERVER não refletem os valores que eu esperava. O SERVER_PORT sempre será 80 e o HTTPS sempre será desativado, independentemente do estado real das coisas.

Ao usar mod_rewrite, despeje suas variáveis de servidor para ver o que você pode testar com o seu RewriteCond. Consulte o link

Você também pode redirecionar o http para https usando a maioria das linguagens de programação. Eu tenho o módulo de sessão do Drupal trabalhando com este site - ele usa essa abordagem. (Eu não tive que dizer ao módulo para configurar as regras, mesmo que não pudesse detectar que o HTTPS estava ligado.)

Certifique-se de usar cookies de sessão segura também. Você precisa deles além do mod_ssl para evitar o seqüestro de sessão.

Para o Drupal, isso é antigo, mas bom link Eu acho que o drupal.org/project/443session é a melhor opção de módulo atualmente.

    
por 06.01.2012 / 22:41