2

我有:

RewriteCond %{HTTP_HOST} ^MYDOMAIN\.com$ [NC]
RewriteRule ^(.*)$ http://www.MYDOMAIN.com/$1 [L,R=301]

RewriteCond %{HTTPS} !=on
RewriteCond %{REQUEST_URI} ^/(user|admin|cart)
RewriteRule ^(.*)$ https://www.MYDOMAIN.com/$1 [R=301,L] 

这有效地路由所有 /user 和 /admin 和 /cart 路径以使用 SSL。我的问题是相反的。我需要一条规则,说明如果您不在这些页面上,它会将您重定向到 HTTP(无 SSL)。

我怎么做?

4

3 回答 3

5

首先完全清除浏览器缓存并重新启动浏览器。然后用这个替换你的 .htaccess :

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

RewriteCond %{HTTP_HOST} ^MYDOMAIN\.com$ [NC]
RewriteRule ^ http://www.MYDOMAIN.com%{REQUEST_URI} [L,R]

RewriteCond %{HTTPS} !=on
RewriteRule ^(user|admin|cart)(/.*|)$ https://www.MYDOMAIN.com%{REQUEST_URI} [R,L,NC]

RewriteCond %{HTTPS} =on
RewriteRule (?!^(user|admin|cart)(/.*|)$)^.*$ http://www.MYDOMAIN.com%{REQUEST_URI} [R,L,NC]
于 2012-04-24T20:42:13.267 回答
0

这行得通吗?我意识到它可能不会,因为SETENV并不总是在 之前得到处理ReWriteRule,但假设,这应该处理你的所有场景:

# Set Correct protocol var based on request:

## Default to http
SetEnv correct_protocol http

## Overwrite to https if secure area
RewriteCond %{REQUEST_URI} ^/(user|admin|cart) [env=correct_protocol:https]

# Set Current (Actual) Protocol Env Variable:

## Again, default to http
SetEnv current_protocol http

## Overwrite with https if %{HTTPS} = on
RewriteCond %{HTTPS} = on [env=current_protocol:https] 

# If current <> correct
RewriteCond %{ENV:current_protocol} != %{ENV:correct_protocol}

# rewrite URL using correct:
RewriteRule .* %{ENV:correct_protocol}://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]
于 2012-05-01T03:36:23.310 回答
0

只需颠倒条件!

RewriteCond %{HTTPS} =on
RewriteCond %{REQUEST_URI} !^/(user|admin|cart)
RewriteRule ^(.*)$ http://www.MYDOMAIN.com/$1 [R=301,L] 
于 2012-04-16T14:45:28.253 回答