2

我有一个具有多个域扩展名的网站:

example.com
example.de
example.fr
example.co.uk

我希望人们被重定向到.com域,以便将 url 重写如下:

example.de        -> http://www.example.com/?loc=de
example.fr        -> http://www.example.com/?loc=fr
www.example.co.uk -> http://www.example.com/?loc=uk

但是,我不知道如何选择 URL 的域扩展部分example.(fr)/bla并重写。我意识到我可以为每个 ex. 创建特殊情况:

RewriteCond %{HTTP_HOST} !^(www\.)?example\.de$
RewriteRule .* http://www.example.com/?loc=de [L,R=301]

但是我想这样做,如果我购买更多扩展,我就不需要更新httpd.conf文件等。

任何建议表示赞赏!

4

1 回答 1

3

创建涵盖多个域的规则非常简单。要实现您想要的,您可以执行以下操作:

RewriteCond %{HTTP_HOST} ^(www\.)?example\.(de|fr|co\.uk)$
RewriteRule .* http://www.example.com/?loc=%2 [R]

它根据要求接受example.de并重写它example.com/~loc=de,也适用于.fr, 和.co.uk. 但是需要注意的是,它将版本重写.co.ukexample.com/~loc=co.uk,这并不是您想要的。它还需要针对新域进行修改。

因此,这是一个更通用的解决方案,但应该可以实现您想要的:

RewriteCond %{HTTP_HOST} ^(www\.)?example\.(co\.)?(.*)$
RewriteCond %{HTTP_HOST} !^(www\.)?example\.com$
RewriteRule .* http://example.com/?loc=%3 [R]

现在稍微解释一下:

第一个RewriteCond匹配其中包含的任何域example,例如example.co.uk, www.example.de,www.example.xxx等。

第二个RewriteCond确保 HTTP_HOST不是 example.comwww.example.com

最后,RewriteRule重写任何符合这两个规则的内容,并将域的最后一部分作为参数粘贴到末尾。

http://www.example.co.uk/->http://example.com/?loc=uk

http://www.example.de/->http://example.com/?loc=de

http://www.example.xxx/->http://example.com/?loc=xxx

http://www.example.com/不重定向。


请注意,在上述解决方案中,如果用户转到http://www.example.de/some/path/index.php,则路径不会被重定向。如果你想要这个功能,那么我们需要在重定向中包含路径:

RewriteRule (.*) http://example.com/$1?loc=%3 [R]
于 2013-06-28T12:52:22.597 回答