mod_rewrite除了root之外的所有东西

时间:2015-09-30 19:13:00

标签: apache mod-rewrite

我正在尝试制作一个mod_rewrite条件和规则,以便所有对" /"以外的域的请求;按原样重新映射到新域,同时请求" /"映射到新域上的特定路径。

例如;
siteone.domain.com/some/great/path转到
sitetwo.domain.com/some/great/path

,同时;
siteone.domain.com/转到
sitetwo.domain.com/some/other/path

第一部分很简单,虽然我已经阅读了几个关于从mod_rewrite规则中排除特定目录或文件的方法,但我无法让第二部分工作。我所有的尝试都结束了;
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语句?如果第一个条件数学做了重写,否则转到第二个条件和规则。那是我错过的吗?

1 个答案:

答案 0 :(得分:0)

我似乎偶然发现了这个问题,因为我怀疑它是愚蠢的。将(。*)添加到第一个RewriteRule似乎解决了这个问题。

所以,而不是

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]