Правила URL менеджера IIS для похожих URL
У меня есть два URL: http:/m?PageView=View1&Language=English&AName=AAA и еще один http:/m?PageView=View2TName=T1&AName=XYZ. Оба эти URL предназначены для отдельного раздела / функциональности. Но так как количество и структура параметров одинаковы, один URL работает, а другой - нет.
Я хочу написать URL перенаправления и переписать правила для двух одинаковых URL. Я написал первое правило, как показано ниже.
<rule name="RedirectUserFriendlyURL12" stopProcessing="true">
<match url="^m/$" />
<conditions>
<add input="{REQUEST_METHOD}" pattern="^POST$" negate="true" />
<add input="{QUERY_STRING}" pattern="^View=([^=&]+)&Language=([^=&]+)&AName=([^=&]+)$" />
</conditions>
<action type="Redirect" url="m/{C:1}/{C:2}/{C:3}" appendQueryString="false" />
</rule>
<rule name="RewriteUserFriendlyURL12" stopProcessing="true">
<match url="^m/([^/]+)/([^/]+)/([^/]+)/?$" />
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
</conditions>
<action type="Rewrite" url="m?View={R:1}&Language={R:2}&AName={R:3}" />
</rule>
и другой URL имеет то же количество параметров, но другое имя, как показано ниже. Вот второе правило.
<rule name="RedirectUserFriendlyURL12" stopProcessing="true">
<match url="^m/$" />
<conditions>
<add input="{REQUEST_METHOD}" pattern="^POST$" negate="true" />
<add input="{QUERY_STRING}" pattern="^View=([^=&]+)&TName=([^=&]+)&AName=([^=&]+)$" />
</conditions>
<action type="Redirect" url="m/{C:1}/{C:2}/{C:3}" appendQueryString="false" />
</rule>
<rule name="RewriteUserFriendlyURL12" stopProcessing="true">
<match url="^m/([^/]+)/([^/]+)/([^/]+)/?$" />
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
</conditions>
<action type="Rewrite" url="m?View={R:1}&TName={R:2}&AName={R:3}" />
</rule>
Когда у меня есть два правила в web.config, один URL работает правильно, т.е. перенаправляется и переписывается, а другой не работает.
Как я могу дифференцировать оба правила, чтобы они работали для обоих URL.
1 ответ
Я решил свою проблему. Я сохранил только одно правило, первое.
Но в моем коде контроллера я должен был соответственно отобразить параметры. Означает не значение параметра TName, к которому я должен получить доступ, я должен получить доступ к языковому параметру только для View-2, так как значение TName передается в параметре Language, когда применяются правила.
Я мог бы использовать два правила, но тогда мне пришлось бы изменить целевой URL перенаправления. Как перенаправление
^View=([^=&]+)&TName=([^=&]+)&AName=([^=&]+)$ to m/{C:1}/tname/{C:2}/{C:3}
Затем переписать обратно из
^m/([^/]+)/tname/([^/]+)/([^/]+)/?$ to m?View={R:1}&TName={R:2}&AName={R:3}.
Но я не хотел, чтобы это было выше.