Правила 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=([^=&amp;]+)&amp;Language=([^=&amp;]+)&amp;AName=([^=&amp;]+)$" />
      </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}&amp;Language={R:2}&amp;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=([^=&amp;]+)&amp;TName=([^=&amp;]+)&amp;AName=([^=&amp;]+)$" />
      </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}&amp;TName={R:2}&amp;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}.

Но я не хотел, чтобы это было выше.

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