これはisapi_rewrite v2を使用しているように見えるので、そのバージョンについて回答します。v3 の構文は少し異なります。
最初の行では!
、www. 示されているように、not-www ではなく www に一致しています。
答えは、URL の一部をキャプチャし、サブマッチ $1、$2 などで書き換えに使用することです。
RewriteCond Host: (?!www\.)example.com
RewriteRule (.*) http\://www.example.com$1 [I,RP]
example.comの代わりにキャプチャすることで、他のWebサイトに簡単にコピーするだけで、任意のドメインに対してより一般的にすることができます. これが最初のキャプチャ $1 になり、残りの URL は $2 になります。
RewriteCond Host: (?!www\.)(.*)
RewriteRule (.*) http\://www.$1$2 [I,RP]
上記のルールは、ページが https であっても常に http にリダイレクトします。http または https をそのまま保持したい場合 (例: https://example.com/a?b=1
to https://www.example.com/a?b=1
)、https フラグを探し、"s" に置き換えます。これは言葉で説明するのが難しいです: これは HTTPS サーバー変数の値「on」を探し、それが「on」の場合は保持し (これが 2 番目のキャプチャーです)、それ以外の場合は保持しません。次に、ルールでは、?2 は 2 番目のキャプチャがあるかどうかをテストします。その場合は「s」を追加し、そうでない場合 (コロン) は何も追加しません (コロンの後に何も追加しません)。このセットでは、URL の残りの部分が 3 番目の部分文字列になりました。
RewriteCond Host: (?!www\.)(.*)
RewriteCond %HTTPS (on)|.*
RewriteRule (.*) http(?2s:)\://www.$1$3 [I,RP]
最後に (ほぼ完了!)、これでサブドメインはそのままになりません。「example.com」ではなく (.*) であるため、 に書き換えabc.example.com/whatever...
られwww.abc.example.com/whatever...
ます。そのため、開発者向けのステージングやローカルホストなど、そのままにしておくサブドメインがある場合、またはホストされているショッピング ドメインの場合は「ショップ」と言う場合、これらを「www」で「or」することができます (localhost には末尾のドットがないことに注意してください。 //localhost のみを処理します)。
RewriteCond Host: (?!www\.|staging\.|shop\.|localhost)(.*)
RewriteCond %HTTPS (on)|.*
RewriteRule (.*) http(?2s:)\://www.$1$3 [I,RP]