使用mod_rewrite取消https特定URL

时间:2012-08-13 17:49:03

标签: apache mod-rewrite

我有一个apache vhost在端口上侦听:443

我正在尝试将任何https请求重定向回http,除非它们符合

的条件
    来自域www.site.co.uk
  1. 并在请求的uri部分包含 <{em> /alpha/beta
  2. 我在配置中有以下语句以及注释逻辑我虽然过程如下,但https://www.mysite.co.uk/alphahttps://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
    

1 个答案:

答案 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。