IIS URL 重写未按预期工作

IIS URL Rewrite Not Working As Expected

我有这个URL重写如下:

  <rewrite>
    <rules>
      <rule name="Item Detail">
        <match url="^item/(?!(action/edit)|(action/preview))([_0-9a-z-()@$!']+)"/>
        <action type="Rewrite" url="item?item={R:1}" appendQueryString="false"/>
      </rule>
    </rules>
  </rewrite>

希望把item/something-dash-something改写成item?item=something-dash-something。重写规则在执行初始意图时确实按预期工作。不幸的是,尽管 Page Designer 模式 (action/edit) 可以正常工作,但 (?!(action/edit)|(action/preview)) 部分并未按预期排除预览模式 (action/preview)。我不确定我错过了什么,因为在 Regex 101 中测试正则表达式表明它按预期工作。我也在 RegexStrom 中测试过它。

编辑: 测试了维克多的建议,但无济于事。 action/preview 的 Rewrite 仍然会触发。下一个愚蠢的项目是(受维克多回答的启发),测试了这条规则,它也没有按预期工作:

  <rewrite>
    <rules>
      <rule name="Item Detail">
        <match url="^item/([_0-9a-z-()@$!']+)"/>
        <conditions logicalGrouping="MatchAny">
          <add input="{REQUEST_URI}" pattern="(action/edit)" negate="true"/>
          <add input="{REQUEST_URI}" pattern="(action/preview)" negate="true"/>
        </conditions>
        <action type="Rewrite" url="item?item={R:1}" appendQueryString="false"/>
      </rule>
    </rules>
  </rewrite>

谁有更好的主意..?我错过了什么吗?

编辑 2:这个还是不行..

  <rewrite>
    <rules>
      <rule name="Item Detail" stopProcessing="true">
        <match url="^item/(?!action/)([_0-9a-z-()@$!']+)"/>
        <action type="Rewrite" url="item?item={R:1}" appendQueryString="false"/>
      </rule>
    </rules>
  </rewrite>

我不知道为什么 preview 似乎被忽略并通过了 url 重写。

编辑 3: 愚蠢的我,其中一个小部件仍然假设总会有查询字符串。案例结束,stopProcessing="true" 仍然是一个很好的补充..

您需要排除具有以下条件的预览和编辑网址:

<rule name="Item Detail">
    <match url="^item/([_0-9a-z-()@$!']+)" />
    <conditions>
        <add input="{REQUEST_URI}" pattern="(action/edit)|(action/preview)" negate="true" />
    </conditions>
    <action type="Rewrite" url="item?item={R:1}" appendQueryString="false" />
</rule>