我有一条将旧式网址转换为新式的规则。只要我在查询中使用相同的参数顺序,它就可以正常工作:
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 和第二个 cond %2 但似乎顺序是'不是这样确定的)
有没有简单的方法来实现这一目标?当然,我可以编写两个单独的规则,每个规则处理每种情况,但想知道是否可以使用一些通用方法(想想如果我们有 3 个参数,那么排列会使这变得难以管理)