Я не знаю, может ли это быть сделано с одним выражением, но это может быть сделано с фиксированным числом выражений, независимо от длины строки запроса.
Ваши правила mod_rewrite будут вызываться повторно, давая вам то, что иногда называют рекурсией mod_rewrite. Есть способы избежать этого, но я думаю, что вы хотите использовать это.
Установите правило, которое заменяет последнюю пару именем = значение &
Продолжайте привязывать строку входного запроса к выходу. Каждый раз, когда ваша строка запроса будет становиться длиннее, а ваш URL будет короче.
В конце концов у вас есть только одно значение, соответствующее вашему последнему правилу.
Вы должны захватить строку запроса с помощью
RewriteCond %{QUERY_STRING} ^(.*)$
И затем вы добавляете его обратно к выводу с% 1
В итоге вы получите четыре строки.
Я знаю, что четыре строки - это то, с чего вы начали, но вы бы сопоставили столько параметров, сколько хотите, без добавления пятой строки.
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^(.*/)([^/]+)/([^/]+) $1?$2=$3&%1 [L]
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^([^/]+)/ $1.php?%1 [L]
Это перепишет следующее
/mypage/param1/val1/param2/val2/param3/val3/... --->
/mypage.php?param1=val1¶m2=val2¶m3=val3&...
Останавливается, когда остается только один параметр. Он возьмет первый «параметр» и вызовет файл .php с таким именем. Количество пар param / val не ограничено.