我有一个apache vhost在端口上侦听:443
我正在尝试将任何https请求重定向回http,除非它们符合
的条件www.site.co.uk
的/alpha
或/beta
我在配置中有以下语句以及注释逻辑我虽然过程如下,但https://www.mysite.co.uk/alpha
和https://www.mysite.co.uk/beta
正在以某种方式301d
我误解了条件重写的逻辑流程吗?
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
答案 0 :(得分:0)
您拥有的规则是URI的逻辑 OR 不包含/alpha
或/beta
。您需要所有条件一起和'。只需删除[OR]
标记:
RewriteCond %{REQUEST_URI} !^\/alpha/? [NC]
RewriteCond %{REQUEST_URI} !^\/beta/? [NC]
这是一个逻辑否定扩展。说 A 是/alpha
而 B 是/beta
。因此,A不是/alpha
。所以,当你说!(A或B)时,如果展开!
,你会得到!A 和!B。