2010-01-23 3 views
0

Я пытаюсь использовать mod_rewrite для обработки неизвестного числа переменных.mod_rewrite с неизвестным числом переменных

Пример URL будет:

example.com/var1-var2-var3/title

меня это до сих пор:

RewriteRule ^([^/.]+)-([^/]*)(.*)$ $3?version[]=$1&version[]=$2 [QSA,N] 
RewriteRule ^([^/.]+)/?$ ?title=$1 [QSA,N] 
RewriteRule ^/?$ /index.php [QSA,L] 

Это возвращает: Array ([название ] => title [version] => Array ([0] => var1-var2 [1] => var3))

Мне нужно это вернуть: Array ([title] => title [version] => Массив ([0] => var1 [1] => var2 [2] => va r3))

ответ

3

Я не думаю, что вы можете записать произвольное количество аргументов в одном регулярном выражении 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 
+0

Это может быть решение, но его обработки в RewriteRule было бы проще. – Daniel

+0

Я ищу что-то более похожее на это: http://howflow.com/tricks/apache2_mod_rewrite_google_friendly_urls За исключением разделения всех переменных, кроме последнего, с '-' вместо '/'. – Daniel

+0

То, что описано на этой странице, является «сложным циклом, перемещая один var в новый формат при каждом запуске», о котором я упоминал. Я отредактирую версию, которая работает для вашего формата. –

Смежные вопросы