Правило перезаписи URL конфликтует в IIS? - PullRequest
2 голосов
/ 24 февраля 2011

У меня проблема с правилами перезаписи 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, подобный этому 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 ]

1 голос
/ 07 марта 2011

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

<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   
0 голосов
/ 24 февраля 2011

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

<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"? Нет косой черты

...