Я не думаю, что вы можете записать произвольное количество аргументов в одном регулярном выражении RewriteRule. Не было бы проще перенаправить на index.php?version=var-var2-var3
, а затем в PHP сделать explode()
на $_POST['version']
?
EDIT: Вы можете сделать это для ограниченного количества варов (9 - максимальные захваченные подгруппы, которые, как я полагаю), а затем удалить избыточные пустые записи. Messier тогда просто взорваться() альтернатива, на мой взгляд, но здесь вы идете:
# 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-адресов.
EDIT 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
Это может быть решение, но его обработки в RewriteRule было бы проще. – Daniel
Я ищу что-то более похожее на это: http://howflow.com/tricks/apache2_mod_rewrite_google_friendly_urls За исключением разделения всех переменных, кроме последнего, с '-' вместо '/'. – Daniel
То, что описано на этой странице, является «сложным циклом, перемещая один var в новый формат при каждом запуске», о котором я упоминал. Я отредактирую версию, которая работает для вашего формата. –