Я не думаю, что вы можете захватить произвольное количество аргументов в одном регулярном выражении RewriteRule. Не проще ли перенаправить на index.php?version=var-var2-var3
, чем в PHP сделать explode()
на $_POST['version']
?
РЕДАКТИРОВАТЬ: Вы можете сделать это для ограниченного числа переменных (9 - максимальное число захваченных подгрупп я считаю), а затем удалить избыточные пустые записи. Гораздо более простой вариант взрыва (), на мой взгляд, но вы идете:
# Convert up to 8 arguments.
RewriteRule ^/([^-]+)-(?:([^-]+)-)?(?:([^-]+)-)?(?:([^-]+)-)?(?:([^-]+)-)?(?:([^-]+)-)?(?:([^-]+)-)?(?:([^-]+)-)?/(.*)$ index.php?t=$9&v[]=$1&v[]=$2&v[]=$3&v[]=$4&v[]=$5&v[]=$6&v[]=$7&v[]=$8
# Strip empty ones.
RewriteRule [?&]v\[\]=$ "" [N]
Вы также можете выполнить сложный цикл, перемещая одну переменную в новый формат при каждом запуске движка перезаписи и продолжайте его до тех пор, пока у вас не закончатся vars, но я думаю, что это не просто механизм переписывания URL для.
РЕДАКТИРОВАТЬ 2: Хорошо, вот цикл, который я упомянул:
RewriteEngine on
RewriteRule ^(.*)/([^/]+)$ $1&page=$2 [L]
RewriteRule ^([^-]+)-(.*)?$ $2&v[]=$1 [L]
RewriteRule ^(?!index\.php)([^-]+)$ /index.php?v[]=$1 [L]
Преобразует пример URL следующим образом:
var1-var2-var3/title <-- Original
var1-var2-var3&page=title
var2-var3&page=title&v[]=var1
var3&page=title&v[]=var1&v[]=var2
index.php?v[]=var3&page=title&v[]=var1&v[]=var2 <-- Final