August 28, 2010

Append query string to mod_rewrite

Уже миллиард раз описано как превратить нечто вроде
script.php?key1=val1&key2=val2
в понятный адрес вида
/script/val1/val2/
потому как и выглядит лучше, и поисковыми роботами приветствуется. Однако вариант обработки
/script/val1/val2/?key3=val3
для меня был неочевидным. Сначала пробовал выцепить параметры запроса regexp'ом:
#This won't work
RewriteEngine On
RewriteRule ^script/(.*)/(.*)/(\?(.*))? /script.php?key1=$1&key2=$2&$3

Но этот вариант, конечно же, не заработал. Решение оказалось куда проще — флаг [QSA], что буквально так и значит: Query String Append, т.е. «Приклеить строку запроса».
#Solution
RewriteEngine On
RewriteRule ^script/(.*)/(.*)/ /script.php?key1=$1&key2=$2 [QSA]

Использование этого флага добавляет входящую строку запроса key3=val3 к перезаписанной mod_rewrit'ом, и на выходе получается key1=val1&key2=val2&key3=val3.

1 comment:

Маша said...

Огромное спасибо! Именно то что я искала