Модифицировать регулярное выражение для перезаписи - множественный отрицательный просмотр

В настоящее время у меня есть работающее Regex Mod Rewrite:

RewriteEngine On
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^(.*/)?((?:cmd)[^/]*)/((?!(?:cmd)[.+]*)(.+)) $1?$2=$3&%1 [L]

Это регулярное выражение принимает следующий URL и преобразует его в URL, расположенный непосредственно ниже:

www.site.com/cmd1/ param / cmd2 / param2 / stillparam2 и превратить его в www.site.com/index.php?cmd1=param&cmd2=param2/stillparam2

Это работает нормально, но я также хотел бы создать еще один негативный Утверждение упреждающего просмотра, чтобы гарантировать, что блок URL - то есть параметр / texthere / - не содержит подчеркивания. Неверная строка может выглядеть так: www.test.com/cmd/thing/getparam_valuehere ; регулярное выражение должно анализировать cmd / thing как пару ключ-значение и игнорировать остальную часть строки. Затем я бы также написал еще один RewriteRule, чтобы добавить блок URL-адреса с подчеркиванием в качестве другого параметра URL-адреса. Произойдет следующий перевод URL:

www.test.com/cmd/param1/cmd2/directory/param2/sortorder_5
www.test.com?cmd=param1&cmd2=directory/param2&sortorder=5

Пожалуйста, дайте мне знать, если я недостаточно ясно выразился. Любая помощь будет отличной.

NB: Я пробовал использовать отрицательный прогноз, вложенный в уже существующий - (?! (?!)) - и пробовал использовать | по двум отрицательным прогнозам, но ни одно из решений не помогло. Я подумал, что, возможно, что-то еще было не так в корне?

Всем спасибо.

Изменить: Я также пробовал следующее - что, как я действительно думал, сработает (но, очевидно, нет!)

RewriteRule ^(.*/)?((?:cmd)[^/]*)/((?!(?:cmd)[.+]*)(?![.+]*(?:_)[.+]*)(.+)) $1?$2=$3&%1 [L]

Это делает следующее:

www.test.com/cmd/param1/sortorder_1/ переводится как www.test.com?cmd=param1/sortorder_1/

Когда вместо этого он должен стать: www.test.com?cmd=param1&sortorder=2/ . Правило для перевода / sortorder_2 / в & sortorder = 2 еще не создано, но, надеюсь, вы понимаете, что я имею в виду).

6
задан pb149 17 July 2011 в 23:29
поделиться