.htaccess-如何强制;www;以一般的方式?

.htaccess-如何强制;www;以一般的方式?,.htaccess,mod-rewrite,.htaccess,Mod Rewrite,这将把domain.com更改为www.domain.com: # Force the "www." RewriteCond %{HTTP_HOST} !^www\.domain\.com$ [NC] RewriteRule ^(.*)$ http://www.domain.com/$1 [R=301,L] 如何替换“域”部分,以便在任何域上都能正常工作?这样就可以了: RewriteEngine On RewriteCond %{HTTP_HOST} !^www\. RewriteRule

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

# Force the "www."
RewriteCond %{HTTP_HOST} !^www\.domain\.com$ [NC]
RewriteRule ^(.*)$ http://www.domain.com/$1 [R=301,L]
如何替换“域”部分,以便在任何域上都能正常工作?

这样就可以了:

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

以下内容应将“www”作为任何没有请求的前缀,并将已编辑的请求重定向到新URI

RewriteCond "%{HTTP_HOST}" "!^www\."         [NC]
RewriteCond "%{HTTP_HOST}" "(.*)"
RewriteRule "(.*)"         "http://www.%1$1" [R=301,L]
我会使用这个规则:

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.
开头;第三个检查HTTPS(
%{HTTPS}
,因此
%{HTTPS}s
,在
的情况下,匹配
s
)。
RewriteRule
的替换部分只是将信息部分合并到一个完整的URL。

这不适用于子域

domain.com被正确重定向到www.domain.com

但是

images.domain.com被重定向到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请求重定向到网站的www版本,只需将以下代码添加到.htaccess文件:


这会将
example.com
重定向到
www.example.com
,排除子域。

这对我来说就像魔术一样

RewriteCond%{HTTP_HOST}^sitename.com[NC]RewriteRule^(.*)的$ $1[L,R=301,北卡罗来纳州]


这是一个比较老的问题,有很多不同的方法可以做到这一点。最完整的答案IMHO可在此处找到:。(粘贴和格式化此处的代码对我不起作用)

此解决方案仅在您希望将所有子域转发到www.yourdomain.com时有效。如果你只想强制www,你应该将第二行更新为:
RewriteCond%{HTTP\u HOST}^yourdomain.com[NC]
我没有使用问题中发布的规则将我的任何子域转发到www.mydomain.com……非常聪明!我喜欢您强制HTTPS检查在捕获组中返回一个“S”,您在下面的行中使用了这个“S”。非常优雅似乎是一个普遍的答案,涵盖了HTTPs和正常协议,工作起来很有魅力。谢谢!我会在上添加
RewriteEngine作为第一行来完成它,因为如果按原样粘贴副本,可能会导致500服务器错误。我喜欢这个解决方案。无论如何,要用tld(如.co.uk?@iUseMagentoNow)完成同样的事情,只需增加点,例如:
RewriteCond%{HTTP_HOST}^(.*)\.(.*)\.(.*)\. [NC]
(严格来说,您的TLD仍然是
.uk
,您的域是
something.co
)。在这种情况下,co是第二级域,实际上不是您域的一部分,而as.uk是国家代码TLD。老实说,在主机托管行业工作过,看到了新的域名格式,我看不到当前的TLD格式除了用于官方用途之外还能持续多久。政府、组织等。在不久的将来,当您可以以与当前规范类似的价格注册fqdn(如fred.bloggs)时,从DNS的角度来看,个人网站将非常不同。对我来说,这似乎是将www.example.com发送到www.www.example.comhaha@Albert也许这是因为你的浏览器缓存。清除缓存并重试。您是正确的!我刚刚运行了匿名(铬)和它的工作很好,谢谢!我非常喜欢这个通用规则。但它不适用于,因为它已经有两个点了。如何更改此规则以使其也适用于.co.uk?对于.co.uk和其他子CCTLD,此规则有效:^([^.]+\.[^.]+)(\.(uk | ar | cy | ar | tr))?$但不幸的是,有些混合类型的TLD()如es,允许domain.es和domain.com.es。将| es添加到正则表达式将匹配domain.es以及此处不需要的www.domain.es。必须找到一种方法来处理这种混合类型的子CCTLD
RewriteEngine On

RewriteCond %{HTTP_HOST} ^[^.]+\.[^.]+$
RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [NE,L,R=301]