我对 mod_rewrite 有一系列要求,这让我很头疼。任何提示/指示都将不胜感激:
域:
www.domain-europe.com
www.domain.com
- 对 www.domain-europe.com 的请求应重定向至 www.domain.com/europe
- 对 www.domain-europe.com/someurl 的请求应重定向到 www.domain.com/someurl
- 发送到服务器的除 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]
你可能还需要做一些调整。我对确切的语义不太熟悉 - 但这至少应该能为你指明正确的方向。
高血压