Apache mod_重写除root之外的所有内容

Apache mod_重写除root之外的所有内容,apache,mod-rewrite,Apache,Mod Rewrite,我正在尝试创建一个mod_重写条件和规则,以便对“/”以外的域的所有请求都按原样重新映射到新域,而对“/”的请求则映射到新域上的特定路径 比如, siteone.domain.com/some/great/path转到 sitetwo.domain.com/some/great/path 而 siteone.domain.com/转到 sitetwo.domain.com/some/other/path 第一部分很简单,虽然我已经阅读了一些关于从mod_重写规则中排除特定目录或文件的howto,

我正在尝试创建一个mod_重写条件和规则,以便对“/”以外的域的所有请求都按原样重新映射到新域,而对“/”的请求则映射到新域上的特定路径

比如,
siteone.domain.com/some/great/path转到
sitetwo.domain.com/some/great/path


siteone.domain.com/转到
sitetwo.domain.com/some/other/path

第一部分很简单,虽然我已经阅读了一些关于从mod_重写规则中排除特定目录或文件的howto,但我无法让第二部分工作。我所有的尝试都以失败告终
siteone.domain.com/转到
sitetwo.domain.com/

下面是我现在的处境。我试图先处理root请求,然后处理其他所有请求

RewriteCond %{REQUEST_URI} ^/$
RewriteRule http://sitetwo.domain.com/some/other/path [R=301]

RewriteCond %{HTTP_HOST} ^siteone\.domain\.com$
RewriteRule (.*) http://sitetwo.domain.com/$1 [R=301,L]
我肯定我错过了一些基本的东西,但我现在正在兜圈子

日志看起来好像两条规则都在处理中。我以为它会在第一场比赛时停止

... (2) init rewrite engine with requested uri /
... (3) applying pattern 'http://sitetwo.domain.com/some/other/path' to uri '/'
... (3) applying pattern '(.*)' to uri '/'
... (2) rewrite '/' -> 'http://sitetwo.domain.com/'
... (2) explicitly forcing redirect with http://sitetwo.domain.com/
... (1) escaping http://sitetwo.domain.com/ for redirect
... (1) redirect to http://sitetwo.domain.com/ [REDIRECT/301]

我想我需要的是某种if/else语句?如果第一个条件做了重写,否则就转到第二个条件和规则。这就是我所缺少的吗?

我似乎偶然发现了这个问题,并且怀疑我遗漏了一些愚蠢的东西。将(.*)添加到第一个重写规则似乎解决了这个问题

因此,与其

RewriteCond %{REQUEST_URI} ^/$
RewriteRule http://sitetwo.domain.com/some/other/path [R=301,L]
我需要

RewriteCond %{REQUEST_URI} ^/$
RewriteRule (.*) http://sitetwo.domain.com/some/other/path [R=301,L]

我似乎无意中发现了这个问题,而且我怀疑我遗漏了一些愚蠢的东西。将(.*)添加到第一个重写规则似乎解决了这个问题

因此,与其

RewriteCond %{REQUEST_URI} ^/$
RewriteRule http://sitetwo.domain.com/some/other/path [R=301,L]
我需要

RewriteCond %{REQUEST_URI} ^/$
RewriteRule (.*) http://sitetwo.domain.com/some/other/path [R=301,L]

从我在日志中看到的情况来看,这两条规则似乎都在处理中。我假设,如果第一个条件和规则匹配,它将执行该操作。日志使它看起来像是两种模式都在应用,这就否定了我正在寻找的效果…我在第一条规则中尝试了带L和不带L。从日志中看到,这两条规则似乎都在处理中。我假设,如果第一个条件和规则匹配,它将执行该操作。日志使它看起来像是两种模式都被应用了,这就否定了我想要的效果…我在第一条规则中尝试了使用和不使用L。