.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}
)的第三个检查是on
或off
,所以%{HTTPS}s
可以是ons
或offs
,在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.com
redirect到www.example.com
不包括子域名。
这对我来说就像魔术一样
RewriteCond%{HTTP_HOST} ^ sitename.com [NC] RewriteRule ^(。*)$ https://www.sitename.com/ $ 1 [L,R = 301,NC]