使用.htaccess将非www URL重定向到www

chr*_*des 6 .htaccess isapi-rewrite

我正在使用Helicon的ISAPI Rewrite 3,它基本上在IIS中启用了.htaccess.我需要将非www URL重定向到www版本,即example.com应重定向到www.example.com.我使用了示例中的以下规则,但它会影响子域:

RewriteCond %{HTTPS} (on)?
RewriteCond %{HTTP:Host} ^(?!www\.)(.+)$ [NC]
RewriteCond %{REQUEST_URI} (.+)
RewriteRule .? http(?%1s)://www.%2%3 [R=301,L]
Run Code Online (Sandbox Code Playgroud)

这大部分都有效,但也将sub.example.com重定向到www.sub.example.com.如何重写上述规则以便子域不会被重定向?

Vin*_*vic 3

附加以下 RewriteCond:

RewriteCond %{HTTP:Host} ^[^.]+\.[a-z]{2,5}$ [NC]
Run Code Online (Sandbox Code Playgroud)

这样,它只会将规则应用于 nondottedsomething.upto Fiveletters,如您所见,subdomain.domain.com 将不匹配条件,因此不会被重写。

您可以更改 [az]{2,5} 以获得更严格的 tld 匹配正则表达式,并在域名中放置对允许的字符的所有约束(因为 [^.]+ 比严格必要的更宽松)。

总而言之,我认为在这种情况下没有必要。

编辑:sadie 发现正则表达式上的一个缺陷,将其第一部分从 [^.] 更改为 [^.]+