mod_rewrite 精确主机名匹配多个条件

mod_rewrite 精确主机名匹配多个条件

我对 mod_rewrite 有一系列要求,这让我很头疼。任何提示/指示都将不胜感激:

域:

www.domain-europe.com
www.domain.com
  1. 对 www.domain-europe.com 的请求应重定向至 www.domain.com/europe
  2. 对 www.domain-europe.com/someurl 的请求应重定向到 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]

答案1

您的重写条件仅匹配 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]

你可能还需要做一些调整。我对确切的语义不太熟悉 - 但这至少应该能为你指明正确的方向。

高血压

相关内容