古いスタイルの URL を新しいスタイルに変換するルールがあります。クエリで同じ順序のパラメーターを使用する限り、問題なく動作します。
RewriteCond %{QUERY_STRING} ^country=([a-z]{2})&id=([0-9]+)$ [NC]
RewriteRule ^(.*)$ http://%1.localhost/%2? [R=301,L]
したがって、url localhost/index.php?country=us&id=1234 は us.localhost/1234 に移動します。
しかし、問題は localhost/index.php?id=1234&country=us を使用すると (引数が順番に入れ替わっていることに注意してください)、もちろんルールは適用されません。
次のように、引数を個別に処理するようにルールを変更することを考えました。
RewriteCond %{QUERY_STRING} country=([a-z]{2}) [NC]
RewriteCond %{QUERY_STRING} id=([0-9]+) [NC]
RewriteRule ^(.*)$ http://%1.localhost/%2? [R=301,L]
しかし、localhost/index.php?id=1234&country=us と入力すると、1234.localhost/us が表示されますが、これは私が期待するものではありません (最初の cond で %1 が返され、2 番目の cond %2 で返されると予想されますが、順序が間違っているようです)このように決定されません)
これを達成する簡単な方法はありますか?もちろん、それぞれのケースを処理する 2 つの個別のルールを作成することもできますが、一般的なアプローチを使用できるかどうか疑問に思っていました (3 つのパラメーターがある場合、順列によってこれが管理不能になると考えてください)。