0

クエリ文字列に応じてリダイレクト ルールを実装する必要があります。クエリ文字列には 4 つのパラメーターが含まれますが、次のように可変位置を取ることができます。

www.a.com/whatever?w=1&x=2&y=3&z=india_en
www.a.com/whatever?x=2&w=1&y=3&z=india_en

にリダイレクトされます

www.a.com/whatever?x=2&w=1&y=3&z=a006

これらに加えて、別のパラメーターを確認する必要がありますsid。がクエリ文字列に存在する場合sid、リダイレクトは行われません。

私はリダイレクトルールを次のように書きました(もちろん最初の部分について):

RewriteCond %{QUERY_STRING} ^w=(.*)$
RewriteRule ^(.*)$ - [E=MY_W:w=%1] [NC,C]
RewriteCond %{QUERY_STRING} ^x=(.*)$
RewriteRule ^(.*)$ - [E=MY_X:x=%1] [NC,C]
RewriteCond %{QUERY_STRING} ^y=(.*)$
RewriteRule ^(.*)$ - [E=MY_Y:y=%1] [NC]
RewriteCond %{QUERY_STRING} ^z=india_en$
RewriteRule ^(.*)$ - [E=MY_Z:z=a006] [C]
RewriteRule ^(/whatever)$ http://www.a.com$1?%{ENV:MY_W}&%{ENV:MY_X}&%{ENV:MY_Y}&%{ENV:MY_Z} [L,R=permanent]

しかし、最後に無数のアンパサンドが付いたリダイレクトループが発生しています

入力: http://www.a.com/whatever?w=1&x=2&y=3&z=india_en

出力: http://www.a.com/whatever?w=1&x=2&y=3&z=india_en&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

そのループから抜け出すには?

4

1 に答える 1

0
#don't rewrite if parameters are already in the right order
RewriteCond %{QUERY_STRING} ^w=(.*)x=(.*)y=(.*)z=(.*)$
RewriteRule .* - [L]

RewriteCond %{QUERY_STRING} ^w=(.*)$
RewriteRule ^(.*)$ - [E=MY_W:w=%1] [NC,C]
RewriteCond %{QUERY_STRING} ^x=(.*)$
RewriteRule ^(.*)$ - [E=MY_X:x=%1] [NC,C]
RewriteCond %{QUERY_STRING} ^y=(.*)$
RewriteRule ^(.*)$ - [E=MY_Y:y=%1] [NC]
RewriteCond %{QUERY_STRING} ^z=india_en$
RewriteRule ^(.*)$ - [E=MY_Z:z=a006] [C]
RewriteRule ^(/whatever)$ http://www.a.com$1?%{ENV:MY_W}&%{ENV:MY_X}&%{ENV:MY_Y}&%{ENV:MY_Z} [L,R=permanent]
于 2013-01-30T21:04:18.720 に答える