我正在尝试制作一个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语句?如果第一个条件数学做了重写,否则转到第二个条件和规则。那是我错过的吗?
答案 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]