IIS URL重写不按预期工作

时间:2017-10-31 04:39:26

标签: iis url-rewriting iis-8 sitefinity

我有这样的网址改写:

  <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。重写规则在执行初始意图时按预期工作。遗憾的是,(?!(action/edit)|(action/preview))部分并未按预期排除预览模式(action/preview),尽管Page Designer模式(action/edit)正常工作。我不知道自从我在Regex 101中测试正则表达式后发现它是否按预期工作时我错过了什么。我也在RegexStrom中测试了它。

修改: 经过测试的维克多的建议,无济于事。重写仍然会为action/preview触发。下一个愚蠢的项目是(受到Victor答案的启发),测试了这个规则并且它也没有按预期工作:

  <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"是一个很好的补充..

1 个答案:

答案 0 :(得分:1)

您需要使用以下条件排除预览和修改网址:

{{1}}