用于处理除给定之外的所有URL的IIS重写规则

时间:2013-09-18 14:14:49

标签: iis url-rewriting

以下是要处理的某些网址的IIS重写规则:

    <rule name="rule" stopProcessing="true">
      <match url="^(word|world|hero|about)[/]?$" />
      <conditions>
        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
      </conditions>
      <action type="Rewrite" url="/info.aspx?id={R:1}" />
    </rule>

如何创建相反的规则?例如,我想处理除“/ special”,“/ escape”之外的所有URL。这样:

    <rule name="rule" stopProcessing="true">
      <match url="^(?!(special)&amp;?!(escape))[/]?$" />
      <conditions>
        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
      </conditions>
      <action type="Rewrite" url="/info.aspx?id={R:1}" />
    </rule>

不起作用。 “/ special”和“/ escape”URL按原样处理,但其他URL给我404页。

1 个答案:

答案 0 :(得分:0)

在这种情况下,您必须使用negate属性。

您的规则将成为:

<rule name="rule" stopProcessing="true">
  <match url="^(special|escape)/?$" negate="true" />
  <conditions>
    <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
    <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
  </conditions>
  <action type="Rewrite" url="/info.aspx?id={R:1}" />
</rule>