Очевидная проблема заключается в том, что ваши текущие регулярные выражения соответствуют только одному символу в имени пользователя или одному номеру. Вам нужно будет добавить плюсик в скобках, чтобы соответствовать нескольким буквам или цифрам. См. эту страницу для получения дополнительной информации о квантификаторах регулярных выражений. Обратите внимание, что вы не будете соответствовать простым URL-адресам, таким как "/ users /" (без идентификатора или имени). Убедитесь, что это то, что вы хотели.
Другая проблема, с которой вы столкнулись, заключается в том, что IIS оценивает правила перезаписи, начиная с первого символа после начального слеша. Таким образом, ваше правило для соответствия /users/([0-9])
не будет ничего совпадать, потому что когда происходит оценка регулярного выражения, URL выглядит как users/foo
, а не /users/foo
. Решение состоит в том, чтобы использовать ^
(который является символом регулярного выражения, что означает "начало строки") в начале шаблона вместо косой черты. Как это:
<rule name="ID">
<match url="^users/([0-9]+)" />
<action type="Rewrite" url="/User.aspx?id={R:1}" />
</rule>
<rule name="Name">
<match url="^users/([a-z]+)" ignoreCase="true" />
<action type="Rewrite" url="/Users.aspx?name={R:1}" />
</rule>
Обратите внимание, что вы выбираете Users.aspx
для одного из этих URL-адресов и User.aspx
(без множественного числа) для другого. Убедитесь, что это то, что вы хотели.
Кстати, я понял, что с помощью IIS Failed Request Tracing для устранения проблем правил перезаписи . Это сделало диагностику действительно простой. Мне удалось сделать тестовый запрос и просмотреть трассировку, чтобы найти, где оценивается каждое правило перезаписи (оно находится в разделе трассы, называемом «PATTERN_MATCH». Для конкретного PATTERN_MATCH для одного из ваших правил я увидел следующее:
-PATTERN_MATCH
Шаблон / пользователи / ([0-9] +?)
Пользователи InputURL / 1
Отрицание ложное
Совпадение ложно
Обратите внимание на отсутствие начального слеша.