3

ポート:443でリッスンするApache vhostがあります

条件を満たさない限り、https リクエストを http にリダイレクトしようとしています。

  1. ドメインからwww.site.co.uk
  2. リクエストの uri 部分にまたはのいずれ かを含む/alpha/beta

プロセスは次のとおりですが、コメント付きのロジックとともに構成に次のステートメントがhttps://www.mysite.co.uk/alphaありhttps://www.mysite.co.uk/betaますが、どういうわけか301されています

条件付き書き換えのロジック フローを誤解していませんか?

RewriteEngine On

# if host submitted is not 'www.mysite.co.uk' un-https the url (i.e. catchall)
RewriteCond %{HTTP_HOST} !^www\.mysite\.co\.uk [NC]
RewriteRule ^(.*)$ http://%{HTTP_HOST}$1 [NC,L,R=301]

# otherwise IF THE domain is 'www.mysite.co.uk
# *and* if the uri does not contain 'alpha' *or* 'beta' un-https the url
RewriteCond %{HTTP_HOST} ^www\.mysite\.co\.uk [NC]
RewriteCond %{REQUEST_URI} !^\/alpha/? [NC,OR]
RewriteCond %{REQUEST_URI} !^\/beta/? [NC]
RewriteRule ^(.*)$ http://%{HTTP_HOST}$1 [NC,L,R=301]

# otherwise the domain must be www.mysite.co.uk
# and the uri must contain '/alpha' *or* '/beta'
# in which case do nothing
4

1 に答える 1

0

あなたが持っているルールは、またはを含まないURIの論理ORです。すべての条件をまとめてまとめる必要がありますフラグを削除するだけです:/alpha/beta[OR]

RewriteCond %{REQUEST_URI} !^\/alpha/? [NC]
RewriteCond %{REQUEST_URI} !^\/beta/? [NC]

論理否定展開です。Aが であり、Bが であるとます。!A したがって、そうではありません。したがって、!(A または B) と言うときに、 を展開すると、!A!B が得られます。/alpha/beta/alpha!

于 2012-08-13T17:59:07.170 に答える