IIS管理器URL规则为类似的URL

时间:2017-07-16 12:05:06

标签: asp.net iis url-rewriting url-redirection iis-manager

我有两个网址:http://...../m?PageView=View1&Language=English&AName=AAA和另一个http://...../m?PageView=View2TName=T1&AName=XYZ。这两个网址都是针对单独的部分/功能。但是,由于参数的数量和模式相同,因此一个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正常工作,即重新编写和重写但另一个不起作用。

如何区分这两个规则,使其适用于两个网址。

1 个答案:

答案 0 :(得分:0)

我解决了我的问题。我只保留了一条规则,第一条规则。

但是在我的控制器代码中,实际上我必须相应地映射参数。表示不是我必须访问的TName参数值,我也必须只为View-2访问语言参数,因为当规则得到应用时,语法参数会传递TName的值。

我可以使用两个规则但是我必须更改重定向目标网址。像重定向一样

^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}.

但我并不想拥有上述内容。