2011-09-21 12 views
10
私は .htaccessで私のサイトアドレスのために wwwを強制しようとしています:

mod_rewrite - wwwを追加する

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

私はmysite.comを開いている場合、これは正常に動作します - それはwwwを追加します。 http://www.mysite.com/index.phpになります。

mysite.com/subpageを開くと、http://www.mysite.com/subpageではなくhttp://www.mysite.com/index.phpにリダイレクトされました。

http://www.mysite.com/subpageを開くとリダイレクトされません(これは期待される動作です)。

どうすればこの問題を解決できますか?自分のサイトへのすべてのリクエストをwwwサブドメインにリダイレクトしたいと思います。

答えて

12

問題はここです:$は終わりを指定しながら、

RewriteCond %{HTTP_HOST} ^mysite\.com$ [NC] 

^は、文字列の先頭を指定します。

.comまたは.+の後にワイルドカードを選択する必要があります。

<IfModule mod_rewrite.c> 
    RewriteCond %{HTTPS} !=on 
    RewriteCond %{HTTP_HOST} !^www\..+$ [NC] 
    RewriteRule^http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L] 
</IfModule> 
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> 
6

は実は、私は氏Szantoに反対する必要があります。アレックスが言ったことを繰り返すために

問題はでなかったことを表示されます:(グーグル経由で)いくつかの追加の研究を通じて

RewriteCond %{HTTP_HOST} ^mysite\.com$ [NC] 

私はこれが私のために素晴らしい仕事ことがわかった:

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

氏Szantoの答え、形式が整っていても、 'www'が欠落しているすべてのリクエストをリダイレクトして、 'www'がリダイレクトされているようです。これは、ほとんどのサブドメインにとって望ましい結果ではありませんでした。上記のコードは、TLドメイン名の前に 'www'とサブドメインがない場合にのみリダイレクトされます。

他人に役立つことを願っています。

+0

私は上記の回答が一番好きです。サブドメインを使用する人は、wwwを不必要に(そして間違って)追加しないように、より具体的にする必要があります。 – Debriter

関連する問題