Я почти понял это самостоятельно, но кое-что мне не хватает. Я хочу настроить пару каталогов и файлов, чтобы требовать SSL и все остальное, что не связано с этими файлами и каталогами, чтобы они указывали обратно на http.
Пока у меня есть это:
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]
Я уверен, что делаю что-то не так, но просто не могу понять ... Первое условие работает отлично - всякий раз, когда я открываю login.php или / admin /, он указывает на https. Но второй не ...
Где я ошибся?
Заранее спасибо!
Скорее всего:
RewriteRule !^/?(admin(.*)|login\.php)$ http://%{SERVER_NAME}/$1 [R,NC,L]
Моя рабочая конфигурация:
<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]
Тест:
http://localhost/admin->https://localhost/admin
https://localhost/admin don't redirect
https://localhost/test->http://localhost/test
Тестирование:
# 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