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的代码版本:
RewriteEngine On
RewriteCond%{HTTPS}!=开启
RewriteCond%{HTTP_HOST} ^ www \。(。+)$ [NC]
RewriteRule ^(。*)$ http://%1 / $ 1 [R = 301,L]
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]