次の永続的なリダイレクトを処理するために、 ISAPI_Rewrite 3 "RewriteRule "を作成したいと思います。
╔════════════════════════════════╦════════════════════════════╗
║ Input ║ Redirect ║
╠════════════════════════════════╬════════════════════════════╣
║ /path/?a=foo&b=bar ║ /path/foo/bar/ ║
║ /path/?b=baz&a=qux ║ /path/qux/baz/ ║
║ /path/?c=1&a=foo&d=2&b=bar&e=3 ║ /path/foo/bar/?c=1&d=2&e=3 ║
╚════════════════════════════════╩════════════════════════════╝
例えば;
RewriteCond ${QUERY_STRING} (?:^|&)a=([\w]+)(?:&|$)
RewriteCond ${QUERY_STRING} (?:^|&)b=([\w]+)(?:&|$)
RewriteRule ^/path/$ /path/%1/%2/? [R=301]
ただし、すべてのクエリ文字列のペアが削除されます (3 番目の例では失敗します)。URL から既知のキーと値のペアのみを削除するための洗練されたソリューションを見つけられないようです。そして、何か...
RewriteCond ${QUERY_STRING} ^(.*)&?a=([\w]+)(.*)&?b=([\w]+)(.*)$
RewriteRule ^/path/$ /path/%2/%4/?%1%3%5 [R=301]
正確には正しくありません (ただし、この例が何をしようとしているのかを理解する必要があります)。
何か案は?
明確化: 3 番目の例では、 のリクエストはand NOT/path/?c=1&a=foo&d=2&b=bar&e=3
にリダイレクトする必要があります。どのクエリ文字列のペアが要求されるか分からない場合があり、そのうちのいくつかは、クライアント側の処理のためにクエリ文字列にとどまる必要がある場合があります。不明なクエリ文字列キーの例は次のとおりです。/path/foo/bar/?c=1&d=2&e=3
/path/foo/bar/1/2/3/
- 「gclid」 - Google アナリティクス (GA) クライアント スクリプトで使用され、Adwords データに結び付けられます
- " utm_source " - トラフィックのソース/タイプを GA に明示的に伝えるために使用されます