Перенаправление субдоменов с подстановочными знаками с использованием 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}.

Что я делаю не так?


person Michal M    schedule 19.07.2013    source источник


Ответы (1)


Возможно ли, что вы провалились и поймали еще один RewriteCond в другом месте? Мне кажется, что RewriteCond в вашем примере никогда не будет соответствовать HTTP_HOST, который заканчивается на domain1.com из-за наличия префикса отрицания !.

Эта небольшая модификация работает так, как вы хотите:

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