В настоящее время у меня есть работающее 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
еще не создано, но, надеюсь, вы понимаете, что я имею в виду).