Проблема перезаписи URL в Intelligencia - PullRequest
1 голос
/ 22 декабря 2010

Я создал 2 правила перезаписи URL в моем файле web.config, которые выглядят следующим образом:

rewrite url = "~ / Products /(.+). Aspx" to = "~ / Products.aspx? Cat = $ 1 "

переписать url =" ~ / Products /(.+)/(.+). Aspx "to =" ~ / Products.aspx? Cat = $ 1 & SubCat = $ 2 "

Если я ввожу Products / xyz.aspx, он работает отлично, но если я пытаюсь использовать URL, который реализует второе правило, такое как Products / xyx / abc.aspx, он передает и xyz, и abc в Cat, а не в SubCat.Любые идеи, как я могу заставить его справиться с обоими?

Ответы [ 3 ]

0 голосов
/ 22 декабря 2010

Это потому, что совпадение с регулярным выражением жадный .(.+) в первой строке соответствует максимально возможному количеству, включая xyz/abc.Быстрое решение вашей проблемы, вероятно, состоит в том, чтобы изменить первый шаблон вместо ([^/]+) (вам может понадобиться экранировать / в зависимости от среды).

0 голосов
/ 22 декабря 2010

Я предлагаю удалить все совпадения на "."символ, поскольку это сделает ваши совпадения немного сложнее предсказать.Вместо этого используйте любые шаблоны персонажей, которые соответствуют вашим категориям и подкатегориям.

rewrite url="~/Products/([a-zA-Z0-9]+).aspx" to="~/Products.aspx?Cat=$1"

rewrite url="~/Products/[a-zA-Z0-9]+)/[a-zA-Z0-9]+).aspx" to="~/Products.aspx?Cat=$1&SubCat=$2"
0 голосов
/ 22 декабря 2010

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

rewrite url="~/Products/(.+?)/(.+).aspx" to="~/Products.aspx?Cat=$1&SubCat=$2"
                           ^
...