1

httpd.ini ファイルで次の行を使用して、example.com にアクセスするユーザーを www.example.com にリダイレクトしています。

RewriteCond Host: (?:www\.)?example.com
RewriteRule (.*) http\://www.example.com [RP,L]

ユーザーが www なしでサイトにアクセスするかどうかにかかわらず、クエリ文字列をリダイレクトする方法を知りたいです。たとえば、次のようになります。

私のユーザーアクセス:

example.com?a=1&b=2
example.com/a/b

私はにリダイレクトしたい:

www.example.com?a=1&b=2
www.example.com/a/b

誰か助けてくれませんか?

どうもありがとう。

4

1 に答える 1

4

これは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=1to 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]
于 2011-07-05T02:57:10.953 に答える