1

我需要在我的网站上强制使用 WWW。

所以我使用了这个htacces:

#Redirect non-www to WWW
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

问题是http://subdomain.mydomain.com 将被重定向到http://www.subdomain.mydomain.com

我该如何解决?

4

2 回答 2

2

为了避免在子域上发生这种情况,您只需一个仅匹配主域而不匹配的条件www.此版本将非常通用地匹配任何具有两个部分且不以 www 开头的域,不匹配任何具有 3 个部分的域,其中第一个是不是万维网。

RewriteEngine On
# Doesn't start with www
RewriteCond %{HTTP_HOST} !^www\. [NC]
# And does not also have a subdomain
RewriteCond %{HTTP_HOST} !^[a-z0-9_-]+\.[a-z0-9_-]+\.[a-z0-9_-]+$ [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

但是,如果您有一组固定的域要处理,这会更简单。与其检查是否以 开头www,不如仅在与裸域匹配时进行重定向。根据需要将尽可能多的域名添加到( | )OR 分组中。

RewriteEngine On
# Matching any of 3 domains without www, and no subdomain
RewriteCond %{HTTP_HOST} ^(domain1|domain2|domain3)\.com$ [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
于 2013-03-09T22:53:23.440 回答
1

如果您只想重定向主域

RewriteEngine On
RewriteCond %{HTTP_HOST} ^mydomain.com$
RewriteRule .* http://www.%{HTTP_HOST}/$0 [R,L]

永远不要在启用的情况下进行测试,有关详细信息301,请参阅此答案提示调试 .htaccess 重写规则

于 2013-03-09T23:08:33.700 回答