我尝试使用以下正则表达式来重写所有请求,而不将子域重定向到www。 URL是一种通用的方式,因为我希望它适用于许多不同的域。如果请求包含子域,则应保持不变。无论子域名是否为www或其他内容。
RewriteEngine On
RewriteCond %{HTTP_HOST} ^([^.]+\.[^.]+)$
RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [NE,L,R=301]
该规则查找由点分隔的2个字符串,这些字符串匹配许多域但不匹配像.co.uk这样的子cctld。所以我在RewriteCond中添加了另一部分
RewriteCond %{HTTP_HOST} ^([^.]+\.[^.]+)(\.(uk|ar|cy|ar|tr))?$
检查可选的第三个点,然后检查与子ccTLD一起使用的一系列TLD。
所以匹配
domain.com
domain.co.uk
但不是
something.domain.com
something.domain.co.uk
好的,但不幸的是有一些混合类型的tld(wiki.mozilla.org/TLD_List),如“.es”,允许“domain.es”以及“domain.com.es”。因此在正则表达式中添加“| es”将匹配
domain.es
domain.com.es
但也
www.domain.es
这里不需要。
任何人都可以改进这个正则表达式,以便它可以处理那些混合类型的ccTLD吗?