Правило перезаписи URL конфликтует в IIS?

У меня проблема с правилами перезаписи URL. Я использую UrlRewritingNet.UrlRewriter Dll для перезаписи URL на веб-сайте asp.net. Я использовал имя правила в качестве "Расширенного" и Другое имя правила в качестве DefaultRule, которое используется для любой страницы профиля пользователя (т. Е. Страницы профиля любого пользователя). Когда я ввел имя пользователя как "AdvancedMachinesTools".
Правила как ниже:-

<urlrewritingnet rewriteOnlyVirtualUrls="true" contextItemsPrefix="QueryString" defaultPage="Login" xmlns="http://www.urlrewriting.net/schemas/config/2006/07">
<rewrites>
    <add name="advanced" virtualUrl="^~/advanced" rewriteUrlParameter="ExcludeFromClientQueryString" destinationUrl="~/advancedSearch.aspx" ignoreCase="true"  />
    <add name="DefaultRule" virtualUrl="^~/(.*)" rewriteUrlParameter="ExcludeFromClientQueryString" destinationUrl="~/UserProfile.aspx?uname=$1" ignoreCase="true"/>
</rewrites>
</urlrewritingnet>

Я получил сообщение об ошибке "Файл не существует". Наконец-то я написал DefaultRule в файле web.config.

Как я это решил...?

РЕДАКТИРОВАНИЕ

Примеры Предположим, что мой сайт URL: www.abcd.com
1) Для расширенного правила я написал URL-адрес примерно так: http://www.abcd.com/advanced
Правило:

<add name="advanced" virtualUrl="^~/advanced" rewriteUrlParameter="ExcludeFromClientQueryString" destinationUrl="~/advancedSearch.aspx" ignoreCase="true"  /> 

2) для правила пользователя по умолчанию для предположения имени пользователя: AdvancedEyecare он использовал правило по умолчанию

 <add name="DefaultRule" virtualUrl="^~/(.*)" rewriteUrlParameter="ExcludeFromClientQueryString" destinationUrl="~/UserProfile.aspx?uname=$1" ignoreCase="true"/>

Когда я ввожу URL, например, http://www.abcd.com/AdvancedEyecare
Тогда я получил ошибку "Файл не существует", потому что Правило использовало 1 расширенное правило, а не пользовательское правило по умолчанию. Я хочу вызвать userrule вместо 1 расширенного правила. Как можно это решить?

2 ответа

Решение

Положить $ в конце первого шаблона:

<add name="advanced" virtualUrl="^~/advanced$" destinationUrl="~/advancedSearch.aspx" />

Это будет соответствовать /advanced и переписать его /advancedSearch.aspx:

http://www.abcd.com/advanced -> http://www.abcd.com/advancedSearch.aspx

Другой переписать вы хотите

http://www.abcd.com/AdvancedEyecare -> http://www.abcd.com/UserProfile.aspx?uname=AdvancedEyecare   

Сначала я бы изменил порядок переписывания правил.

<rule name="GroupDefaultRule">
     <match url="Group" />
     <action type="Rewrite" url="Page2.aspx?action=group" />
</rule>
<rule name="Group1Rule">
     <match url="(.*)/Group" />
      <action type="Rewrite" url="page1.aspx?action=group&amp;uname={R:1}" />
</rule>

Тем не менее, почему OlewinskiGroup можно сопоставить с "(.*)/Group"? Слэш-подарок отсутствует

Другие вопросы по тегам