有关于使用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中。
谢谢! :)
答案 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]