2011-02-06 14 views
91

これはwww.domain.comdomain.comを変更します:.htaccess - 強制的に "www。"一般的な方法で?

# Force the "www." 
RewriteCond %{HTTP_HOST} !^www\.domain\.com$ [NC] 
RewriteRule ^(.*)$ http://www.domain.com/$1 [R=301,L] 

これは上の任意のドメインを動作するようにどのように私は、「ドメイン」の部分を置き換えますか?

答えて

222

私はこのルールを使用する:

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の場合)空でないかどうかを最初の条件のチェックは、第2は、ホストの値がwww.で始まらないかどうかをチェックします。 HTTPS(%{HTTPS})がonまたはoffのいずれかであるため、%{HTTPS}sonsまたはoffsのいずれかであり、onsの場合はsが一致します)。 RewriteRuleの置換部分は、情報部分を完全なURLにマージします。

編集:URLのように動作しますしません:https://yourdomain.com/en/usa

+25

このソリューションは、すべてのサブドメインをwww.yourdomain.comに転送する場合にのみ機能します。 'RewriteCond%{HTTP_HOST}^yourdomain.com [NC]' –

+1

www.mydomainに転送されたサブドメインの_any_を取得できません。comの質問に投稿されたルールを使用して... – lol

+3

非常に賢い!私はあなたが次の行で使用したキャプチャグループで "S"を返すようにHTTPSチェックを強制しました。非常にエレガント –

37

これはそれを行うだろう。

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

シンプルで効果的! – ChaseMoskal

+0

ありがとうございますが、https://はどうですか? –

1

1を持っていない任意のリクエストに「www」を接頭辞、および新しいURIに編集した要求をリダイレクトする必要があり、次の。

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

これは、サブドメインでは動作しません。

domain.comが正しくwww.domain.comにリダイレクトされます

しかし

images.domain.comは、代わりにサブドメインかどうかをチェックするのwww.images.domain.com

にリダイレクトされます「ないWWW」は、2つのドットがあるかどうかを確認、次のとおりです。

RewriteCond %{HTTP_HOST} ^(.*)$ [NC] 
RewriteCond %{HTTP_HOST} !^(.*)\.(.*)\. [NC] 
RewriteCond %{HTTPS}s ^on(s)| 
RewriteRule^HTTP%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L] 
+8

これは、.co.ukのような特定のTLDでは動作しません – kieranajp

+0

私はこの解決策が好きです。とにかく.co.ukのようなTLDで同じことを達成するには? – TylersSN

+1

@iUseMagentoNowは、ドットを増やすだけです。たとえば、 'RewriteCond%{HTTP_HOST}!^(。*)\。(。*)\。(。*)\。 [NC] '(厳密に言えば、あなたのTLDはまだ' .uk'で、あなたのドメインは 'something.co'です。) – mirabilos

4

あなたがWWWのバージョンにあなたのサイトにすべての非WWW要求をリダイレクトしたい場合は、すべてを行う必要が追加されますあなたの.htaccessファイルに次のコード:

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

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

これは、サブドメインを除くwww.example.comexample.comをリダイレクトします。

+0

私にとってこれはwww.example.comをwww.www.example.comに送っているようです。haha –

+0

@Albertおそらくこれはあなたのブラウザのキャッシュのためです。キャッシュをクリアして再試行してください。 – starkeen

+0

あなたは正しいです!私はちょうどシークレット(クロム)で走ったし、それはうまく働いた、ありがとう! –

0

これは私

するRewriteCondの%{HTTP_HOST}^sitename.com [NC]のRewriteRule ^ために魔法のように働いた(。*)$ https://www.sitename.com/ $ 1 [L、R = 301、NC]