Pergunta

Esta é outra pergunta .htaccess. E eu já fiz minha revisão da literatura. Gostaria de receber qualquer ajuda.

Requisitos:

  1. Força HTTPS apenas por alguns URLs.
  2. Navegador não deveria dizer página parcialmente criptografado para páginas SSL.

Eu estou usando CodeIgnitor e beliscou o base_url em config.php para:

$config['base_url'] = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS']=='on') ? 'https://' : 'http://' ;
$config['base_url'] .= $_SERVER['HTTP_HOST'];
$config['base_url'] .= preg_replace('@/+$@','',dirname($_SERVER['SCRIPT_NAME'])).'/';

Assim, se um URL é acessado com https: //. todas as ligações contidas nele também seria em HTTPS isso é para evitar problema "parcialmente criptografado página"

Eu comecei com o seguinte código htaccess:

RewriteCond %{HTTPS} !on
RewriteRule ^(.*)/(abc|xyz|pqr)(.*)$ https://%{HTTP_HOST}/cart/$2$3 [R=301,NC,L]

RewriteCond %{HTTPS} on
RewriteCond %{REQUEST_URI} !^(.*)/(abc|xyz|pqr)(.*)$ [NC]
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,NC,L]

Com este qualquer URL ter abc , xyz ou PQR será redirecionado para HTTPS e qualquer URL não ter ele será forçado a voltar para HTTP.

Isso funcionou bem, o único problema com isso é que ele não é capaz de evitar a questão "parcialmente criptografado página". Por exemplo, se eu ir para url http://www.example.com/abc/ index.php , ele será redirecionado para https: //www.example.com/abc/index.php . Mas as ligações nesta página digamos https://www.example.com/images/ logo.png , será alterado para HTTP por causa da regra de reescrita último. Assim fazendo a página parcialmente criptografado.

Eu também tentei adicionar HTTP_REFERER de verificação como este para resolver este problema, mas obviamente que não vai resolver o problema. Porque todos os cliques provenientes de uma página HTTPS nunca teria se convertido em HTTP.

RewriteCond %{HTTPS} !on
RewriteRule ^(.*)/(abc|xyz|pqr)(.*)$ https://%{HTTP_HOST}/cart/$2$3 [R=301,NC,L]

RewriteCond %{HTTPS} on
RewriteCond %{HTTP_REFERER} !^(https)(.*)$
RewriteCond %{REQUEST_URI} !^(.*)/(abc|xyz|pqr)(.*)$ [NC]
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,NC,L]

Só quero saber se há uma melhor abordagem disponível para este problema simples ou estou fazendo isso da maneira errada. Vai usar ganchos CI em vez de .htaccess resolver isso?

Agradecemos antecipadamente

Foi útil?

Solução 2

Ok. Acho que encontrei a solução. Eu testei-o também no meu servidor. funciona bem .. precisava de uma condição http referer também na reescrita

RewriteCond %{HTTPS} !on
RewriteRule ^(.*)/(abc|xyz|pqr)(.*)$ https://%{HTTP_HOST}/cart/$2$3 [R=301,NC,L]

RewriteCond %{HTTPS} on
RewriteCond %{HTTP_REFERER} !^https(.*)/(abc|xyz|pqr)(.*)$ [NC]
RewriteCond %{REQUEST_URI} !^(.*)/(abc|xyz|pqr)(.*)$ [NC]
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,NC,L]

Agora, se você visitar qualquer uma das páginas com (abc, xyz, PQR) será redirecionado para https: // ... também todo o link embutido será servido a partir https. para que o navegador não vai mostrar o aviso de criptografia parcial (sinal de aviso vermelho na barra de status)

quando você se move longe do qualquer um destes página, essa página será no SSL causa de verificação referer, e esta página pode mostrar aviso parcialmente criptografado (mas eu posso viver com isso). Uma vez que você se afasta desta página tudo vai ser não-SSL.

Espero que isso ajude alguém !!!

Outras dicas

Você poderia colocar seus conteúdos estáticos em um domínio diferente, como static.example.com e desativar o HTTPS para HTTP redirecionamento para tais solicitações.

Use //static.example.com/… a referência de que os recursos para utilizar o mesmo esquema de URI como o documento de referência está contido e teste em seu RewriteRule se tal recurso é solicitado:

RewriteCond %{HTTPS} on
RewriteCond %{HTTP_HOST} !=static.example.com
RewriteRule !(^|/)(abc|xyz|pqr) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,NC,L]
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top