Parte do arquivo .htaccess força https
em determinadas páginas (por exemplo, quando o usuário faz login, insere informações de cartão de crédito etc.) enquanto força http
em todas as outras páginas. Esta parece ser a configuração ideal para o que eu preciso.
No entanto, uma das extensões do meu site é responsável por gerar um formulário de processamento de cartão de crédito. No URL de ação do formulário, ele contém o URL https
da raiz da Web (por exemplo, link ). No entanto, a raiz da Web não é uma dessas páginas em que o .htaccess força https
, portanto, está forçando um redirecionamento para http
. Por causa disso, a extensão está falhando porque o formulário está tentando enviar para um https
que redireciona para http
.
O que devo fazer? Eu não quero que os usuários sejam forçados a ver uma página protegida quando não precisam; Eu prefiro que eles colham os benefícios do cache. E, obviamente, em páginas seguras, eles precisam se submeter a URLs seguras (o CMS do meu site aparentemente funciona de tal forma que todos os envios de formulários para a raiz da Web funcionam muito bem). Não posso dizer à extensão para enviar para um URL diferente.
Aqui está a parte relevante do meu .htaccess:
<IfModule mod_rewrite.c>
RewriteEngine On
# Define default protocol for all assets
RewriteRule ^ - [E=protocol:http,E=ssl:%{HTTPS}off]
# Define HTTPS targets, add more cond as required
RewriteCond $1 (payment|sign-in|sign-up) [NC]
RewriteRule (.*) - [E=protocol:https,E=ssl:%{HTTPS}on]
# Rewrite host if necessary and redirect on correct protocol
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^ %{ENV:protocol}://%1%{REQUEST_URI} [L,R=301]
# Protocol switch if necessary (host is already correct)
RewriteCond %{ENV:ssl} ^(onoff|offon)
RewriteCond %{REQUEST_URI} !\.(gif|jpe?g|png|css|js)$ [NC]
RewriteRule ^ %{ENV:protocol}://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
# Finally, process the internal redirect
RewriteCond $1 !\.(gif|jpe?g|png)$ [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php/$1 [L]
</IfModule>
Talvez isso possa ser modificado para "não redirecionar se for um envio de formulário"