我的网站有多个域扩展名:
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
文件等。
任何建议都表示赞赏!
答案 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.uk
,www.example.de
,www.example.xxx
等。
第二个RewriteCond
确保HTTP_HOST 不是 example.com
或www.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]