我想将所有不包含www
的网址重定向到www
我用过这个:
RewriteCond %{HTTP_HOST} !^www.example.com$
RewriteRule ^(.*) http://www.example.com$1 [QSA,L,R=301]
现在我需要一个不像这样重定向的子域,否则我会收到错误。
所以我想将任何不以sub开头的网址或www
的网址重定向到www.example.com
我该怎么做?感谢
答案 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]
这适用于所有域,不包括任何子域。玩得开心。