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>
我有这个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>