Перезапись URL с помощью ISAPI Rewrite - PullRequest
0 голосов
/ 17 декабря 2011

Я пытаюсь создать систему фильтров для продуктов и сделать URL-адрес более дружественным, я использую файл карты для параметров фильтра и следующий код перезаписи.

URL может содержать один параметрили 10 параметров и будет выглядеть так:

Start URL: www.domain.com/climbing-frames/
First Param: www.domain.com/climbing-frames_rockwall/
Second Param: www.domain.com/climbing frames_rockwall_rope-ladder/

И так далее ...

Правило перезаписи до сих пор

 RewriteMap features txt:features.txt
    RewriteCond ${features:$1|NOT_FOUND} !NOT_FOUND
    RewriteRule ^climbing-frames(?:_([^/]+))(?:_([^/]+))(?:_([^/]+))(?:_([^/]+))/ /get-features.cfm?(?1(param1=${features:$1|0}))(?2(,${features:$2|0}))(?3(,${features:$3|0}))(?4(,${features:$4|0}))

Это работает, если 4коляски вводятся, но не только в том случае, если введены только два.Это сводит меня с ума!

Любые подсказки будут с благодарностью.

Джейсон

1 Ответ

0 голосов
/ 19 декабря 2011

Я думаю, что вы близки - возможно, был бы циклический подход, который был бы лучше, но я склонен идти по тому пути, которым вы идете.

Я вижу, как вы делаете подчеркивание без захвата, а затем захватывает следующие символы. Вместо того, чтобы искать не-косую черту, ищите не подчеркивание. С не-косой чертой, это захватит все это в первой группе. То есть ищите подчеркивание-не подчеркивание.

Затем (переходя к реальному исправлению) каждый раздел должен быть необязательным - вышеприведенное правило требует наличия четырех разделов. Так добавить? в конце каждого, как:

RewriteRule ^climbing-frames(?:_([^_]+))(?:_([^_]+))?(?:_([^_]+))?(?:_([^_]+))?/

Я покинул первую требуемую группу, поскольку она практически должна быть там, и RewriteCond все равно проверяет ее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...