Apache 使用mod rewrite取消https特定URL

Apache 使用mod rewrite取消https特定URL,apache,mod-rewrite,Apache,Mod Rewrite,我有一个apache vhost正在监听端口443 我正在尝试将任何https请求重定向回http,除非它们满足以下条件: 从域www.site.co.uk 并在请求的uri部分包含/alpha或/beta 我在配置中有以下语句以及注释逻辑I,尽管过程如下,但https://www.mysite.co.uk/alpha和https://www.mysite.co.uk/beta正在以某种方式被删除 我是否误解了条件重写的逻辑流程 RewriteEngine On # if host submi

我有一个apache vhost正在监听端口443

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

  • 从域
    www.site.co.uk
  • 并在请求的uri部分包含
    /alpha
    /beta
  • 我在配置中有以下语句以及注释逻辑I,尽管过程如下,但
    https://www.mysite.co.uk/alpha
    https://www.mysite.co.uk/beta
    正在以某种方式被删除

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

    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
    

    您拥有的规则是URI的逻辑不包含
    /alpha
    /beta
    。你需要把所有的条件结合起来。只需删除
    [或]
    标志:

    RewriteCond %{REQUEST_URI} !^\/alpha/? [NC]
    RewriteCond %{REQUEST_URI} !^\/beta/? [NC]
    
    这是逻辑上的否定展开。假设A是
    /alpha
    ,B是
    /beta
    !因此,A不是
    /alpha
    。所以当你说!(A或B),如果展开
    ,你得到了!A!B