.htaccess-「www」を強制する方法 一般的な方法で?


102

これが変更されますdomain.comwww.domain.com

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

これがどのドメインで機能するように「ドメイン」の部分を置き換えるにはどうすればよいですか?

回答:


249

私はこのルールを使用します:

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]

最初の条件は、Host値が空でないかどうかをチェックします(HTTP / 1.0の場合)。2番目は、Host値がで始まらないかどうかをチェックしwww.ます。HTTPS用の第三のチェック(%{HTTPS}のいずれかであるonか、offそう、%{HTTPS}sのいずれかであるonsか、offsの場合に一致しています)。then の置換部分は、情報部分を完全なURLにマージするだけです。onssRewriteRule


31
このソリューションは、すべてのサブドメインをwww.yourdomain.comに転送する場合にのみ機能します。:あなたが唯一のWWWを強制したい場合は、される第2ラインを更新する必要がありますRewriteCond %{HTTP_HOST} ^yourdomain.com [NC]
ジャレドPomranky

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

3
非常に賢い!次の行で使用したキャプチャグループで「S」を返すようにHTTPSチェックを強制したのが好きです。非常にエレガント
code_monk 14

普遍的な回答のようで、HTTPと通常のプロトコルをカバーし、魅力のように機能します。
Clain Dsilva、2015

1
ありがとう!RewriteEngine Onそのままコピーして貼り付けた場合、500サーバーエラーが発生する可能性があるため、最初の行として追加します。
Ryan Casas、


5

www以外のすべてのリクエストをwwwバージョンにリダイレクトする場合は、.htaccessファイルに次のコードを追加するだけです。

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$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]

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

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

この場合の.coは第2レベルのドメインであり、実際には.ukが国コードTLDであるようなドメインの一部ではありません。正直に言うと、ホスティング業界で働いていて、ドメイン名の新しい形式を見てきたので、現在のTLD形式が公式の使用以外に持続するのを見ることができません。政府、組織など。近い将来、fqdn like、fred.bloggsを現在の基準と同様の価格で登録できるようになると、パーソナルWebはDNSの観点からは非常に異なって見えます。
クリス

1

次の例では、「www」を持たないリクエストの前に「www」を付け、編集したリクエストを新しいURIにリダイレクトします。

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

1
RewriteEngine On

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

これにより、サブドメインの除外にリダイレクトさexample.comwww.example.comます。


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

@Albertおそらくこれはブラウザのキャッシュが原因です。キャッシュをクリアして再試行してください。
Amit Verma 2017年

あなたは正しいです!シークレットモード(Chrome)で実行したところ、問題なく動作しました。ありがとうございます。
Albert Renshaw 2017年

1
私はこの一般的なルールがとても好きです。ただし、domain.co.uk にはすでに2つのドットがあるため、機能しません。このルールを変更して、.co.ukでも機能するようにするにはどうすればよいですか?
Sacha Vorbeck 2017

1
.co.ukおよびその他のサブcctldsの場合、これは機能します:^([^。] + \。[^。] +)(\。(uk | ar | cy | ar | tr))?$残念ながら、いくつかの混合があります型指定されたtlds(wiki.mozilla.org/TLD_List)は、domain.esおよびdomain.com.esを許可するesと同様です。正規表現に| esを追加すると、domain.esだけでなく、ここでは不要なwww.domain.esにも一致します。この混合型のサブcctldsを処理する方法を見つける必要がある
Sacha Vorbeck

0

これは古い質問であり、これを行うにはさまざまな方法があります。最も完全な答えであるIMHOは、https://gist.github.com/vielhuber/f2c6bdd1ed9024023fe4にあります。(ここにコードを貼り付けてフォーマットしてもうまくいきませんでした)


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.