3

我有一个 apache vhost 监听端口:443

我正在尝试将任何 https 请求重定向回 http,除非它们满足以下条件

  1. 从域www.site.co.uk
  2. 并包含 /alpha包含在请求的/betauri 部分

我在配置中有以下语句以及注释逻辑我虽然过程如下,但https://www.mysite.co.uk/alpha不知https://www.mysite.co.uk/beta何故被 301'd

我是否误解了条件重写的逻辑流程?

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不包含/alphaor /beta。你需要所有的条件都'ed 在一起。只需删除[OR]标志:

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

这是一个逻辑否定扩展。说A/alphaB/beta。!A 因此不是/alpha。所以当你说 !(A 或 B)时,如果你扩展!,你会得到 !A!B。

于 2012-08-13T17:59:07.170 回答