.htaccess 301 redirigir para todos los https a http EXCEPTO UNA PÁGINA

Aquí está el código que tengo actualmente en mi archivo .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] 

Sé que Jack se reescribe … y todas las otras publicaciones sobre este tema realmente no se ajustan a mis criterios y no sé lo suficiente sobre el idioma para tratar de descifrarlo.

Básicamente lo que necesito es esto:

  1. redirigir todas las instancias de “example.com” a “www.example.com”
  2. redirigir todas las instancias de ” https //www.example.com” a ” http : //www.example.com” con la excepción de 1 página !!!! (en caso de que importe, el nombre de archivo de esa página es payments.php)

El código que tengo arriba funciona, pero para la página 1 que necesito ser https, está reescribiendo la url a http. Esa página tiene que ser https.

Gracias, Chris

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

Lo he probado a nivel local, todos los casos de uso parecen funcionar bien. Si tiene más preguntas, no dude en preguntar.

 # 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! Cuando el usuario navega desde cualquier página https con www a cualquier página https sin www , se le pide que acepte el certificado de seguridad de su dominio no www.

Por ejemplo (SÍ = solicitud para aceptar el certificado, NO – opuesto):

 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 

Traté de reordenar las reglas en .htaccess sin éxito. Si alguien encuentra una mejor solución, será muy apreciada.

Además de la gran solución de william, puedes negar la solicitud de uri en algún lugar antes de que https rewriterule

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

Esa fue una buena publicación y parece redireccionar a http correctamente, pero quiero algo como lo siguiente

 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://sofes.miximages.com/apache/.txtblank.gif) RewriteRule ^(.*)$ index.php/$1 [L] 

mi URL es http://www.sitename.com y la barra inclinada es opcional, lo que necesito es que, si no hay texto como productos en la url, entonces debe ser http: // y si hay una cadena de productos en el uri entonces debería ser https: //

cómo hacerlo … cuando lo intenté va a un bucle … bucle de redirección.

Estoy usando codeigniter frame work y he eliminado index.php de la url.

así que si algo como http://sitename.com/products ocurrió, entonces quiero que sea https://sitename.com/products

y si no hay productos en la url, debería redireccionar a 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] 

No lo he probado pero algo así debería funcionar

Editar: actualizado