.htaccess如何以通用方式强制www为各种域

时间:2017-07-03 16:51:53

标签: regex apache .htaccess mod-rewrite

我尝试使用以下正则表达式来重写所有请求,而不将子域重定向到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吗?

0 个答案:

没有答案