如何使用.htaccess不使用硬编码将非wwwredirect到www?

RewriteEngine On RewriteCond%{HTTPS}!= on RewriteCond%{HTTP_HOST} ^ www。(。+)$ [NC] RewriteRule ^(。*)$ http://%1 / $ 1 [R = 301,L]

…导致一个完美的,非硬编码的301redirect从“www到非www”,会有什么相反的样子?

编辑:

根据Prix的post,我已经将.htaccess文件更改为以下内容:

Options +FollowSymLinks <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteCond %{HTTPS} !=on RewriteCond %{HTTP_HOST} !^www\.(.+)$ [NC] RewriteRule ^(.*)$ http://www.%1/$1 [R=301,L] </IfModule> 

如前所述,不幸的是,这个redirect到“ http://www./ ”。 谁可以帮忙? 谢谢

Prix​​几乎拥有它。 当你拒绝RewriteCond (with ! )时,它不会捕获,所以%1是空的。 两种可能的解决方

虚拟RewriteCond

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

RewriteRule %{HTTP_HOST}

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

总之,一个干净,经过testing的代码版本:

这工作(对我来说)将wwwredirect到非www

 RewriteEngine On
 RewriteCond%{HTTPS}!=开启
 RewriteCond%{HTTP_HOST} ^ www \。(。+)$ [NC]
 RewriteRule ^(。*)$ http://%1 / $ 1 [R = 301,L]

这些工作中的任何一个(为我)redirect非www到www

 RewriteCond%{HTTP_HOST}!^ www \。(。+)$ [NC]
 RewriteRule ^(。*)$ http:// www \。%{HTTP_HOST} / $ 1 [R = 301,L]

要么

 RewriteCond%{HTTP_HOST}!^ www \。  [NC]
 RewriteCond%{HTTP_HOST} ^(。+)$ [NC]
 RewriteRule ^(。*)$ http:// www \。%1 / $ 1 [R = 301,L]
 RewriteCond %{HTTP_HOST} !^www\.(.+)$ [NC] RewriteCond %{HTTP_HOST} ^(.+)\.(.+)$ [NC] RewriteRule ^(.*)$ http://www\.%2/$1 [R=301,L] 

! 意味着如果它不是以“www …”开头的,那么将它发送到www.%1 ,这是(.+)

以下一直在Apache 2上工作:

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