/ / Apache .htaccess redirecionando https para http e vice-versa - .htaccess, mod-rewrite, apache2

Apache .htaccess redirecionando https para http e vice-versa - .htaccess, mod-rewrite, apache2

Eu estou tentando obter um drupal 7 instalar para redirecionartrês páginas para https e forçar todo o resto de volta para http. Isoladamente, a primeira regra de reescrita aqui funciona. Com ambos habilitados, nada funciona e tudo redireciona de volta para /index.php

# Turn SSL on for checkout except for checkout, signup/login and user/login
RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} ^(/checkout)$ [NC,OR]
RewriteCond %{REQUEST_URI} ^(/signup/login)$ [NC,OR]
RewriteCond %{REQUEST_URI} ^(/user/login)$ [NC]
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]

# Turn SSL off everything but checkout, signup/login and user/login
RewriteCond %{HTTPS} on
RewriteCond %{REQUEST_URI} !(checkout|signup/login|user/login) [NC]
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [R=301,L]

Respostas:

0 para resposta № 1

Isso parece correto e as regras funcionam para mim. Desde a primeira regra funciona eu vou assumir RewriteEngine on está em algum lugar acima dessas regras. Existem outras regras em seus arquivos htaccess? Poderia ser outra coisa causando o problema.

Eu tentei as seguintes regras e sou redirecionado como esperado por ambos. A ausência da regra HTTPS não deve fazer diferença.

RewriteEngine on

# Turn SSL on for checkout except for checkout, signup/login and user/login
RewriteCond %{REQUEST_URI} ^(/checkout)$ [NC,OR]
RewriteCond %{REQUEST_URI} ^(/signup/login)$ [NC,OR]
RewriteCond %{REQUEST_URI} ^(/user/login)$ [NC]
RewriteRule ^(.*)$ http://%{HTTP_HOST}/ssl/$1 [R=301,L]

# Turn SSL off everything but checkout, signup/login and user/login
RewriteCond %{REQUEST_URI} !(checkout|signup/login|user/login) [NC]
RewriteRule ^ssl/(.*)$ http://%{HTTP_HOST}/$1 [R=301,L]

Eu configuro esses arquivos para testar com:

  • público/
    • checkout (conteúdo: checkout)
    • foobar (conteúdo: foobar)
    • inscrever-se/
      • login (conteúdo: inscrição / login)
    • do utilizador/
      • login (conteúdo: usuário / login)
    • ssl /
      • checkout (conteúdo: checkout ssl)
      • foobar (conteúdo: ssl foobar)
      • inscrever-se/
        • login (conteúdo: inscrição / login SSL)
      • do utilizador/
        • login (conteúdo: ssl user / login)

Você pode tentar estas regras e ver que elas funcionam como esperado:

$ curl -L http://samhuri.net/checkout
ssl checkout
$ curl -L http://samhuri.net/ssl/checkout
ssl checkout
$ curl -L http://samhuri.net/foobar
foobar
$ curl -L http://samhuri.net/ssl/foobar
foobar

Passar curl a -i sinalizar para ver cabeçalhos e códigos de status.

Então eu suspeito que algo está errado. Você tem outras regras para redirecionar para ou de https?