将所有非www重定向到www,除了一个带有htaccess的子域

时间:2012-08-06 15:08:43

标签: .htaccess redirect

我想将所有不包含www的网址重定向到www

我用过这个:

RewriteCond %{HTTP_HOST} !^www.example.com$
RewriteRule ^(.*) http://www.example.com$1 [QSA,L,R=301]

现在我需要一个不像这样重定向的子域,否则我会收到错误。

所以我想将任何不以sub开头的网址或www的网址重定向到www.example.com

我该怎么做?感谢

3 个答案:

答案 0 :(得分:21)

您需要第二个RewriteCond。您可以将任意数量的内容应用于RewriteRule

假设任何不是sub.mydomain.com的内容需要www.mydomain.com,那么这是您的代码:

RewriteCond %{HTTP_HOST} !^sub.mydomain.com$
RewriteCond %{HTTP_HOST} !^www.mydomain.com$
RewriteRule ^(.*) http://www.mydomain.com/$1 [QSA,L,R=301]

但是你可以使用Regex中的管道(|)字符进一步简化:

RewriteCond %{HTTP_HOST} !^(sub|www).mydomain.com$
RewriteRule ^(.*) http://www.mydomain.com/$1 [QSA,L,R=301]

答案 1 :(得分:3)

我尝试了Scott S的答案,但它没有用,所以我修改了使用我用于一般301的那个:

RewriteCond %{HTTP_HOST} ^domain.com
RewriteCond %{HTTP_HOST} !^subdomain.domain.com
RewriteRule ^(.*)$ http://www.newdomain.com/$1 [R=301,L]

它就像一个魅力

答案 2 :(得分:3)

RewriteCond %{HTTP_HOST} !^(.*)\.(.*)\. [NC]
RewriteCond %{HTTPS}s ^on(s)|
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

这适用于所有域,不包括任何子域。玩得开心。