Назад | Перейти на главную страницу

Apache SSL для входа в систему и NON-SSL для всего остального (.htaccess)

Я почти понял это самостоятельно, но кое-что мне не хватает. Я хочу настроить пару каталогов и файлов, чтобы требовать 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