使用子域将非www重定向到WWW错误

时间:2013-03-09 22:02:48

标签: .htaccess redirect dns subdomain

我需要在我的网站上强制使用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

我该如何解决?

2 个答案:

答案 0 :(得分:2)

要在子域名上避免这种情况,您只是一个只匹配主域而不是www.的条件。此版本将非常匹配,任何具有两个部分并且不以www开头的域,不匹配任何域有3个部分,第一个不是www。

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]

答案 1 :(得分:1)

如果您只想重定向主域名

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

永远不要在启用301的情况下进行测试,请参阅此回答Tips for debugging .htaccess rewrite rules了解详细信息。