我几乎已经明白自己的想法了,但是我错过了一些东西。 我想设置几个目录和文件来要求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]
我的工作configuration:
<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]
testing:
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