将多个子域重定向到另一个域名

时间:2012-02-23 16:40:34

标签: apache mod-rewrite apache2 dns subdomain

有关于使用mod_rewrite重定向特定子域以使用其他域的问题。我正在寻找最简单的方法来实现这一点,而无需为我的每个域名创建单独的重写规则。我将添加许多新域名(总共约20-30个域名)。

因此,假设我的主域名是example.com,我想将该域名用于所有内容。因此,如果使用我的其他任何域,它们将自动重定向到主域,保留子域前缀和URL路径。

示例:
test.example.org => test.example.com
test2.example.co.uk => test2.example.com
test3.example.net/hello/world.php => test3.example.com/hello/world.php

RewriteEngine on
RewriteCond %{HTTP_HOST} ^(.*)\.([a-zA-Z]+)\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1\.example.com/$1 [R=301,L]

我不确定上述内容是否正常或语法是否正确。但基本上,我希望它匹配子域名前缀,然后是任何域名,以及任何TLD(.org,.info,.biz,.co.uk,.net等)。我认为它需要首先确保它不是正确的主域(example.com)以防止无限重定向循环。

此外,是否有可能检查HTTPS是ON还是OFF并正确设置重定向?如果没有,我可以将HTTPS设置为ON。

很抱歉这个混乱,虽然我想确保我第一次做到这一点,而不需要将每个域编程到.htaccess中。

谢谢! :)

2 个答案:

答案 0 :(得分:2)

(。*)是贪婪的,所以你不想使用它,我假设你不想重新创建一个无限循环。

RewriteEngine on

RewriteCond   %{HTTPS}s    ^..(s?)
RewriteRule   ^            -                                [E=PROTO:http%1]              

RewriteCond   %{HTTP_HOST} !^\w+\.example\.com$             [NC]
RewriteCond   %{HTTP_HOST} ^(\w+)\.\w+\..+                  [NC]
RewriteRule   ^/?(.*)      %{ENV:PROTO}://%1.example.com/$1 [R=301,L]

答案 1 :(得分:1)

该规则无效,因为它会将以example.com结尾的任何主机重定向回example.com,您将获得重定向循环。您需要将正则表达式更改为这样,以匹配.com结尾的任何内容:

RewriteCond %{HTTP_HOST} ^([^\.]+)\.?([a-zA-Z]+)\.(?:(?!com).)*$ [NC]
相关问题