重写域扩展名

时间:2013-06-28 11:26:11

标签: apache mod-rewrite

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

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

我希望让人们重定向到.com域名,以便重写网址如下:

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的域扩展部分并重写。我意识到我可以为每个例子创建特殊情况:

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

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

任何建议都表示赞赏!

1 个答案:

答案 0 :(得分: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.uk版本重写为example.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.ukwww.example.dewww.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]