mod_rewrite确切的主机名与多个条件匹配

我有一套mod_rewrite的要求,这是我的头。 任何提示/指针,将不胜感激:

域:

www.domain-europe.com www.domain.com 
  1. www.domain-europe.com的请求应该redirect到www.domain.com/europe
  2. www.domain-europe.com/someurl的请求应redirect到www.domain.com/someurl
  3. 任何其他请求到非www.domain-europe.com或www.domain.com服务器应该被设置为www.domain.com

我可以做任何1和3或2和3这些工作,但不是所有三个在同一时间。

这是我尝试过的许多迭代之一:

 RewriteEngine on RewriteCond %{HTTP_HOST} ^www\.domain-europe\.com$ [NC] RewriteRule (.*) http://www.domain.com/europe [R=301,L] RewriteCond %{HTTP_HOST} ^www\.domain-europe\.com/ [NC] RewriteRule (.*) http://www.domain.com$1 [R=301,L] RewriteCond %{HTTP_HOST} !^www\.domain\.com [NC] RewriteCond %{HTTP_HOST} !^$ RewriteRule ^/(.*) http://www.domain.com/$1 [L,R] 

您的重写条件只匹配HTTP主机,而不是请求URI – 而您的重写规则(。*)匹配所有内容…

 RewriteCond %{HTTP_HOST} ^www\.domain-europe\.com$ [NC] RewriteRule (.*) http://www.domain.com/europe [R=301,L] 

无论是否被请求,都会在主机为www.domain-europe.com的任何时候匹配,或者/foo/bar/virus.exe被请求。

相反,也许尝试更类似于:

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

你可能还需要调整一些。 我在确切的语义上有点生疏 – 但这至less应该指向正确的方向。

HTH