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] 

これにより、SSL を使用するようにすべての /user パス、/admin パス、および /cart パスが効果的にルーティングされます。私の問題は逆です。これらのページにアクセスしていない場合は、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 に答える