2011-04-19 21 views
6

que tienen un sitio de comercio electrónico, y quiero activar HTTPS sólo en la sección de comercio electrónico del sitio ubicado en https://mysite.com/buy¿Cómo habilito https solo en ciertas páginas con htaccess?

Puesto que todos los enlaces en mis páginas son relativos, cuando alguien visita http://mysite.com y hace clic en comprar, se toman a http://mysite.com/buy

Además, si visitan https://mysite.com/buy y presionan sobre un enlace a otra página, se llevan a https://mysite.com.

La razón por la que quiero https solo en esa sección es porque tengo elementos externos (es decir, Google Maps, Youtube, Twitter, etc.) que no se pueden enviar a través de https.

¿Hay alguna manera con htaccess que puedo hacer que el directorio/buy fuerce https, pero cada otra página fuerza a http?

Edit: En caso de que alguien esté interesado, pude resolver esto usando PHP. Yo todavía prefieren una solución .htaccess, pero esto va a funcionar por ahora:

if($_SERVER['HTTPS'] == "on") { 
    if(strpos($_SERVER['REQUEST_URI'],"buy") === false) { 
     Header("Location: http://$_SERVER['HTTP_HOST']."".$_SERVER['REQUEST_URI']"); 
    } 
} 

Respuesta

6

Pruebe esto en su archivo .htaccess:

Options +FollowSymLinks 
RewriteEngine on 

# redirect for http /buy page 
RewriteCond %{SERVER_PORT} =80 
RewriteRule ^buy/?$ https://mysite.com/buy [R=301,QSA,L,NE] 

# redirect for https non /buy pages 
RewriteCond %{SERVER_PORT} =443 
RewriteCond %{REQUEST_URI} !^/buy [NC] 
RewriteRule ^/?(.*)$ http://mysite.com/$1 [R=301,QSA,L,NE] 

R=301 se redirigir con https estado 301
L hará última regla
NE es por ninguna cadena de consulta escapar
QSA anexará la consulta existente parámetros
NC es para ignorar la comparación de casos

$1 es su REQUEST_URI

+0

Puede simplificar 'RewriteRule^/? (. *) $ Http://mysite.com/$1 [R = 301, QSA, L, NE]' a 'RewriteRule (. *) Http: //mysite.com$1 [R = 301, QSA, L, NE] ' – elimisteve

+0

@elimisteve: Claro que se puede hacer. – anubhava

0

no tengo manos en la experiencia, pero por lo que veo, parece que el archivo de configuración .htaccess debería afectar sólo los archivos en la carpeta en la que se almacena el archivo

Por lo que debe ser capaz de hacer algo como esto:

http://www.besthostratings.com/articles/force-ssl-htaccess.html

Y ponerlo en la carpeta/compra de su sitio.

+0

Gracias por la respuesta. El problema es que/buy es una URL reescrita, por lo que la carpeta/buy no existe en realidad. – Jarred

0

Si su página Web se encuentra en el puerto 9001 Solamente es necesario activar ningún puerto en el cuadro de Linux y realizar estos cambios en /etc/httpd/conf.d/ssl.conf .A continuación, configurar su certificado SSL Puerto de escucha a 9002 y crear y poner llave y tras en su configuración httpd.conf archivo

Listen 9001 
<VirtualHost *:9001> 
ServerAdmin [email protected] 
DocumentRoot /mnt/work/httpd 
<Directory "/mnt/work/httpd"> 
Options FollowSymLinks 
AllowOverride AuthConfig 
</Directory> 
    SSLEngine On 
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP 
SSLCertificateKeyFile /etc/httpd/www.test.example.com.key 
SSLCertificateFile /etc/httpd/www.test.example.com.crt 
RewriteCond %{HTTPS} off 
RewriteRule (.*) https://www.test.example.com:9002%{REQUEST_URI} 

y su archivo .htaccess debe tener este aspecto

AuthType Digest 
AuthName "Protected" 
AuthDigestProvider file 
AuthGroupFile /dev/null 
AuthUserFile /mnt/work/httpd/digest_auth 
Require user username**      
Cuestiones relacionadas