2013-07-19 78 views
2

我想弄清楚如何使用mod_rewrite重定向到一個新的域,這將包括通配符子域重定向。使用mod_rewrite的通配符子域重定向

我希望這樣的結果:

domain1.com      -> domain2.com 
domain1.com/foo/bar?baz=quux  -> domain2.com/foo/bar?baz=quux 
www.domain1.com     -> www.domain2.com 
www.domain1.com/foo/bar?baz=quux -> www.domain2.com/foo/bar?baz=quux 
sub.domain1.com     -> sub.domain2.com 
sub.domain1.com/foo/bar?baz=quux -> sub.domain2.com/foo/bar?baz=quux 
*.domain1.com     -> *.domain2.com 
*.domain1.com/foo/bar?baz=quux -> *.domain2.com/foo/bar?baz=quux 

我是想這樣的事情:

RewriteCond %{HTTP_HOST} !^(.+\.)?domain2.com$ [NC] 
RewriteRule^http://%1domain2.com%{REQUEST_URI} [R=301,L] 

但是,%1,我希望是指夾在RewriteCond可選的子域是沒有被帶到完全丟棄,所以任何請求最終被重定向到http://domain2.com%{REQUEST_URI}

我在做什麼錯?

回答

5

您是否有可能在其他地方遇到另一個RewriteCond?在我看來,您的例子中的RewriteCond將永遠不匹配由於存在!否定前綴而以domain1.com結尾的HTTP_HOST。

這一細小的改動似乎工作你想要的方式:

RewriteCond %{HTTP_HOST} ^(.+\.)?domain1.com$ [NC] 
RewriteRule^http://%1domain2.com%{REQUEST_URI} [R=301,L] 
相關問題