Правило перезаписи 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&uname={R:1}" />
</rule>
Тем не менее, почему OlewinskiGroup можно сопоставить с "(.*)/Group"? Слэш-подарок отсутствует