.htaccess - 如何强制"www." 通用的方式?

Sta*_*bie 99 .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]
Run Code Online (Sandbox Code Playgroud)

如何替换"域"部分以使其适用于任何域?

Gum*_*mbo 241

我会用这个规则:

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]
Run Code Online (Sandbox Code Playgroud)

第一个条件检查Host值是否为空(如果是HTTP/1.0); 第二个检查Host值是否不以www.; HTTPS的第三检查(%{HTTPS}或者是onoff,因此%{HTTPS}s是任一onsoffs和在的情况下,onss被匹配).然后,替换部分RewriteRule将信息部分合并为完整的URL.

  • 仅当您希望将所有子域转发到www.yourdomain.com时,此解决方案才有效.如果您只想强制使用www,则应将第二行更新为:`RewriteCond%{HTTP_HOST} ^ yourdomain.com [NC]` (29认同)
  • 非常聪明!我喜欢你强制HTTPS检查在捕获组中返回一个"S",你在下面的行中使用了它.十分优雅 (3认同)
  • 我没有使用问题中发布的规则将_any_我的子域名转发到www.mydomain.com ... (2认同)

Mar*_*eau 42

这样做:

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


小智 5

如果要将站点上所有非www的请求重定向到www版本,只需将以下代码添加到.htaccess文件中:

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