Когда у меня есть несколько RewriteCond, соединенных вместе, только ссылки на группы RewriteCond могут ссылаться на %0
- %9
.
В следующей задаче параметры в строке запроса url могут быть в любом порядке. Чтобы разобрать их в воображаемый url, мне нужно было бы сопоставить каждый параметр в строке запроса индивидуально:
RewriteCond %{QUERY_STRING} param1=([^&]+)
RewriteCond %{QUERY_STRING} param2=([^&]+)
RewriteCond %{QUERY_STRING} param3=([^&]+)
RewriteRule ^foo$ bar/%1/%2/%3/ [R]
Как я уже сказал, это не работает. Чтобы исправить это, я мог бы ссылаться на группу захвата предыдущего RewriteCond в следующем RewriteCond и "распространять" каждый параметр на фактический RewriteRule:
RewriteCond %{QUERY_STRING} param1=([^&]+)
RewriteCond %1&%{QUERY_STRING} ^([^&]*)&.*param2=([^&]+)
RewriteCond %1&%2&%{QUERY_STRING} ^([^&]*)&([^&]*)&.*param3=([^&]+)
RewriteRule ^foo$ bar/%1/%2/%3/ [R]
Это должно сработать, но для каждого дополнительного параметра он становится более беспорядочным. Другим решением может быть синтаксический анализ одного параметра и перенаправление клиента после каждого параметра (что приводит к длительной цепочке перенаправления, чего я бы хотел избежать).
Существует ли более чистый способ доступа к группам захвата всех RewriteCond в RewriteRule (например, можно ли назвать их или назначить их переменной, чтобы я мог ссылаться на них где-то еще?)