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

问题描述:

有一个关于使用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是否打开或关闭并正确设置重定向?如果没有,我总是可以将HTTPS设置为ON。

对不起,这个混淆,虽然我想确保我第一次得到这个权利,而不需要编程每个域到.htaccess。

谢谢! :)

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

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] 

+0

使用这个例子,它的工作。我只需要做一些进一步的测试,以确保它能够按照需要正确工作。感谢您的详细回复! – 2012-02-23 18:08:43

+0

你知道第一个规则是如何工作的吗?字符串是ons还是offs,所以在%1 =“s”或者“”上得到'^ ..(s?)'结果,因此env变量PROTO得到了正确设置。 Cond2A防止'* .example.com'上的循环和cond2B文件上的子域。 Rule2B把它放在一起。如果它能够工作,那么这个刻度线会很好:-) – TerryE 2012-02-23 18:14:19

+0

它完美的工作,我理解这个概念。我遇到的一个问题是,有人去过example.org,直到他们导航才会停留在example.org。我尝试了其他技巧,但是我无法将它改为主要的“example.com”。 – 2012-02-23 18:43:03

这条规则将无法工作,因为它会与example.com结束的任何主机重定向到example.com,你会得到一个重定向循环。您需要更改正则表达式看起来像这样,到末与.com匹配任何:

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

你已经明确了我的混乱!唯一的问题是,我可能有其他域名也有“.com”。 – 2012-02-23 18:07:28