2010-01-16 16 views
12

Aquí está el código que tengo actualmente en mi archivo .htaccess:.htaccess redireccionamiento 301 para todos los https a http SALVO UNA PÁGINA

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] 

Conozco a Jack sobre reescrituras ... y todos los demás puestos de este tema realmente no se ajusta a mis criterios y no sé lo suficiente sobre el lenguaje para tratar de descifrarlo.

Básicamente lo que necesito es la siguiente:

  1. redirección todas las instancias de "example.com" a "www.example.com"
  2. redirección 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 en http. Esa página tiene que ser https.

Gracias, Chris

+0

Gracias a todos por su ayuda! Chris – dell116

Respuesta

10

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 parece 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 https página sinwww, se le pide que acepte el certificado de seguridad de su dominio sin www.

Por ejemplo (SI = solicitud para aceptar el certificado, NO - contrario):

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 cambiar el orden de las reglas en .htaccess sin éxito. Si alguien encuentra una mejor solución, será muy apreciada.

+0

¡Gracias! Funciona perfectamente Mientras tanto, me gustaría leer un poco más sobre este tipo de cosas. ¿Tienes alguna buena sugerencia? – dell116

+1

Siempre puede leer el manual;) http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html –

-1
# 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] 

Yo no lo he probado, pero algo así debería funcionar

Editar: Actualizado

+0

Esto todavía permite que todas las demás páginas sean https (no reescribiéndolas en http). Esto no está reescribiendo http://www.example.com/payments.php a https://www.example.com/payments.php El primer redireccionamiento sigue funcionando. Veo a qué te refieres ..... y parece que está bien ... simplemente no funciona. ¿Alguna otra idea? Gracias, Chris – dell116

+0

He afinado su código un poco. Sin embargo, un problema es que requiere aceptar certificados de example.com y www.example.com. –

5

además de gran solución de William, se puede negar solicite uri en algún lugar antes de https rewriterule

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

Esta es realmente la solución adecuada. – dotancohen

0

Eso era un buen puesto y parece volver a dirigir 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 ^(.*)$ https://www.site.com/$1 [R=301,L] 


RewriteCond $1 !^(index\.php|images|js|css|static|img|payment|robots\.txt|blank.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 hay hay texto como productos en la url, entonces tiene que él http: // y si hay un producto de cadena en el URI entonces debe ser https: //

cómo hacerlo ... cuando me intenté ir a un bucle ... bucle de redirección.

estoy usando codeigniter trabajo de marco y he eliminado index.php de la url.

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

y si no hay productos en la url, entonces debe redirigir a la dirección http: //

Cuestiones relacionadas