Apache SSL para login e NON-SSL para todo o resto (.htacces)

1

Eu quase descobri por conta própria, mas há algo que estou perdendo. Eu quero definir um par de diretórios e arquivos para exigir SSL e tudo o mais que não está relacionado a esses arquivos e dirs para apontar de volta para http.

Até agora eu tenho isso:

RewriteEngine on
RewriteBase /
# Force ssl for login & admin
RewriteCond %{HTTPS} !on
RewriteRule ^/?(admin(.*)|login\.php)$ https://%{SERVER_NAME}/$1 [R,NC,L]

# Force non-ssl for others 
RewriteCond %{HTTPS} on
RewriteRule ^/?(admin(.*)|login\.php)$ http://%{SERVER_NAME}/$1 [R,NC,L]

Tenho certeza de que estou fazendo algo errado, mas não consigo entender ... A primeira condição funciona perfeitamente - sempre que eu acesso login.php ou / admin / aponta para https. Mas o segundo não ...

Onde me confundi?

Obrigado antecipadamente!

    
por tftd 30.01.2011 / 21:42

1 resposta

2

Provável:

RewriteRule !^/?(admin(.*)|login\.php)$ http://%{SERVER_NAME}/$1 [R,NC,L]

Minha configuração de trabalho:

<VirtualHost *:80>
        DocumentRoot /var/www
        <Directory /var/www/>
                AllowOverride All
                Order allow,deny
                allow from all
        </Directory>
</VirtualHost>

<VirtualHost *:443>
        DocumentRoot /var/www
        <Directory /var/www/>
                AllowOverride All
                Order allow,deny
                allow from all
        </Directory>
        SSLEngine on
        SSLCertificateFile    /etc/ssl/certs/ssl-cert-snakeoil.pem
        SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
</VirtualHost>

.htaccess:

RewriteEngine on
RewriteBase /
RewriteCond %{HTTPS} off
RewriteRule ^admin$ https://%{SERVER_NAME}/$1 [R,NC,L]

RewriteCond %{HTTPS} on
RewriteRule !^admin$ http://%{SERVER_NAME}/$1 [R,NC,L]

Teste:

http://localhost/admin->https://localhost/admin
https://localhost/admin don't redirect
https://localhost/test->http://localhost/test

Tesing:

# wget --no-check-certificate https://localhost/dgfjt943jreiorgd
--2011-01-31 16:55:18--  https://localhost/dgfjt943jreiorgd
Resolving localhost... 127.0.0.1
Connecting to localhost|127.0.0.1|:443... connected.
WARNING: certificate common name 'xxx.com' doesn't match requested host name 'localhost'.
HTTP request sent, awaiting response... 302 Found
Location: http://localhost/ [following]
--2011-01-31 16:55:18--  http://localhost/
Connecting to localhost|127.0.0.1|:80... connected.
HTTP request sent, awaiting response... 200 OK
    
por 30.01.2011 / 22:51