我有这样的网址改写:
<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"
是一个很好的补充..
答案 0 :(得分:1)
您需要使用以下条件排除预览和修改网址:
{{1}}