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