.htaccess 301 redirect para todos os https para http EXCETO UMA PÁGINA

Aqui está o código que eu tenho atualmente no meu arquivo .htaccess:

Options +FollowSymLinks RewriteEngine on RewriteBase / RewriteCond %{HTTP_HOST} ^example.com [NC] RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301] RewriteEngine On RewriteCond %{HTTPS} on RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 

Eu sei Jack sobre reescreve … e todos os outros posts sobre este assunto realmente não se encheckboxm em meus critérios e eu não sei o suficiente sobre a linguagem para tentar decifrá-lo.

Basicamente o que eu preciso é isto:

  1. redirect todas as instâncias de “example.com” para “www.example.com”
  2. redirect todas as ocorrências de ” https //www.example.com” para ” http : //www.example.com”, com exceção de 1 página !!!! (caso seja importante, o nome do arquivo dessa página é payments.php)

O código que eu tenho acima funciona, mas para a página que eu preciso ser https, ele está reescrevendo o url para http. Essa uma página tem que ser https.

Obrigado, chris

Apache / 2.2.6 (Win32) mod_ssl / 2.2.8 OpenSSL / 0.9.8g PHP / 5.2.6

Eu testei isso localmente, todos os casos de uso parecem funcionar bem. Se você tiver outras dúvidas, fique à vontade para perguntar.

 # Rewrite Rules for example.com RewriteEngine On RewriteBase / # Redirect from example.com to www.example.com RewriteCond %{HTTP_HOST} ^example\.com [NC] RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L] # Turn SSL on for payments RewriteCond %{HTTPS} off RewriteCond %{SCRIPT_FILENAME} \/payments\.php [NC] RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L] # Turn SSL off everything but payments RewriteCond %{HTTPS} on RewriteCond %{SCRIPT_FILENAME} !\/payments\.php [NC] RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [R=301,L] 

IMPORTANTE! Quando o usuário navega de qualquer página https com www para qualquer página https sem www , ele é solicitado a aceitar o certificado de segurança do seu domínio que não é www.

Por exemplo (SIM = solicitação para aceitar o certificado, NÃO – oposto):

 1) https://www.asdf.com/payments.php - YES (www.asdf.com) 2) http://www.asdf.com/phpinfo.php - NO 3) https://asdf.com/phpinfo.php - YES (asdf.com) 4) https://www.asdf.com/phpinfo.php - NO 

Eu tentei reordenar regras no .htaccess sem sucesso. Se alguém encontrar uma solução melhor, será muito apreciado.

além da grande solução do william, você pode negar o uri em algum lugar antes do rewriterule do https

 RewriteCond %{REQUEST_URI} !^/?payments\.php 

Esse foi um bom post e parece redirect para http corretamente, mas eu quero alguma coisa como o seguinte

 RewriteCond %{HTTP_HOST} ^site\.com RewriteRule (.*) http://www.site.com/$1 [R=301,L] #RewriteCond %{SERVER_PORT} !^443$ #RewriteRule ^products https://www.site.com/products/ [R=301,L] # Disable SSL on pages other than payments.php RewriteCond %{HTTPS} on RewriteCond %{REQUEST_URI} !^products RewriteRule ^(.*)$ http://www.site.com/$1 [R=301,L] # Require SSL on payments.php RewriteCond %{HTTPS} !on RewriteCond %{REQUEST_URI} ^products\/?$ RewriteRule ^(.*)$ http://sofpt.miximages.com/apache/.txtblank.gif) RewriteRule ^(.*)$ index.php/$1 [L] 

minha url é http://www.sitename.com e a barra final é opcional, o que eu preciso é que, se não houver texto como produtos na url, ele precisará http: // e se houver uma sequência de produtos em o uri então deveria ser https: //

como fazer isso … quando eu tentei ele vai para um laço … loop de redirecionamento.

Eu estou usando o trabalho de quadro codeigniter e eu removi index.php da url.

Então, se algo como http://sitename.com/products ocorreu, então eu quero que seja https://sitename.com/products

e se não houver produtos na URL, ele deve redirect para http: //

 # Rewrite Rules for example.com RewriteEngine On RewriteBase / # Redirect from example.com to www.example.com RewriteCond %{HTTP_HOST} ^example\.com [NC] RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L] # Disable SSL on pages other than payments.php RewriteCond %{HTTPS} on RewriteCond %{REQUEST_URI} !^payments\.php$ RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L] # Require SSL on payments.php RewriteCond %{HTTPS} !on RewriteCond %{REQUEST_URI} ^payments\.php$ RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L] 

Eu não testei, mas algo assim deveria funcionar

Editar: atualizado