.htaccess – 如何以通用的方式强制“www。”?

这会将domain.com更改为www.domain.com

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

如何replace“域”部分,以便这可以在任何域上运行?

我会使用这个规则:

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

第一个条件检查主机值是否为空(在HTTP / 1.0的情况下); 第二个检查主机值是否不以www.开头www. ; 对HTTPS( %{HTTPS} )的第三个检查是onoff ,所以%{HTTPS}s可以是onsoffs ,在ons的情况下是匹配的。 RewriteRule的replace部分然后将信息部分合并到完整的URL。

编辑:不适用于URL: https : //yourdomain.com/en/usa

这将做到这一点:

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

如果您想要将所有非www请求redirect到您的站点到www版本,则只需将以下代码添加到.htaccess文件中即可:

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

这不适用于子域名。

domain.com正确地被redirect到www.domain.com

images.domain.com被redirect到www.images.domain.com

而不是检查子域是否“不是www”,检查是否有两个点:

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

以下内容应将“www”前缀添加到没有的请求中,并将编辑后的请求redirect到新的URI。

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

这将example.comredirect到www.example.com不包括子域名。

这对我来说就像魔术一样

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