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