mod_rewrite - 添加www

Nic*_*uge 11 apache .htaccess mod-rewrite

我正试图强制www我的网站地址.htaccess:

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

如果我打开mysite.com这个工作正常 - 它补充说www.它变成了http://www.mysite.com/index.php.

但是,如果我打开mysite.com/subpagehttp://www.mysite.com/index.php再次重定向,而不是http://www.mysite.com/subpage.

但是,如果我打开,http://www.mysite.com/subpage我不会得到重定向(这是预期的行为).

我怎样才能解决这个问题?我想将所有请求重定向到我的网站到www子域.

Ale*_*lex 17

从精湛的HTML5 Boilerplate.htaccess:

<IfModule mod_rewrite.c>
  RewriteCond %{HTTPS} !=on
  RewriteCond %{HTTP_HOST} !^www\..+$ [NC]
  RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</IfModule>
Run Code Online (Sandbox Code Playgroud)


Kor*_*nto 15

问题就在这里:

RewriteCond %{HTTP_HOST} ^mysite\.com$ [NC]
Run Code Online (Sandbox Code Playgroud)

^指定字符串的开头,同时$指定结束.

为了使其工作,您需要在.com或之后选择通配符.+.

重申Alex所说的话:

 <IfModule mod_rewrite.c>
   RewriteCond %{HTTPS} !=on
   RewriteCond %{HTTP_HOST} !^www\..+$ [NC]
   RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
 </IfModule>
Run Code Online (Sandbox Code Playgroud)


Cam*_*eaf 7

实际上,我不同意Szanto先生的意见.

看起来问题不在于:

RewriteCond %{HTTP_HOST} ^mysite\.com$ [NC]
Run Code Online (Sandbox Code Playgroud)

通过一些额外的研究(通过谷歌),我发现这对我很有用:

<IfModule mod_rewrite.c>
  RewriteCond %{HTTPS} !=on
  RewriteCond %{HTTP_HOST} ^mysite\.com$ [NC]
  RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</IfModule>
Run Code Online (Sandbox Code Playgroud)

Szanto先生的答案,虽然格式很好,但似乎重定向所有缺少'www'的请求,并附加了'www'重定向.对于大多数子域,这不是理想的结果.如果TL域名之前没有'www'且没有子域,则上述代码仅重定向.

希望这有助于其他人.