IIS7的URL重写模块未正确处理重写规则

时间:2011-09-02 19:00:52

标签: iis url module rewrite

我有附加的重定向和重写规则。基本上,www.foo.com/vehicles/vehicle-detail.aspx?stockno=123456被重写为www.foo.com/123456。这符合我所拥有的规则。现在,如果我尝试浏览到不存在的页面(即www.foo.com/test.aspx),则重写规则符合条件,IIS会尝试将请求转发到www.foo.com/vehicles/vehicle-detail。 aspx(没有查询字符串)。在vehicle-detail.aspx页面上,如果查询字符串中没有有效的stockno,我有代码重定向到主页,所以这就是正在发生的事情。我不确定如何纠正规则,因此条件不符合真实条件。我附加了失败请求跟踪的规则和屏幕截图,我启用了查看请求/重写规则。

<rule name="Redirect StockNo" enabled="true" stopProcessing="true">
<match url="^Vehicles/Vehicle-Detail\.aspx$" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
    <add input="{REQUEST_METHOD}" pattern="^POST$" negate="true" />
    <add input="{QUERY_STRING}" pattern="^stockno=([^=&amp;]+)$" />
</conditions>
<action type="Redirect" url="{C:1}" appendQueryString="false" />

<rule name="Rewrite StockNo" enabled="true" stopProcessing="true">
<match url="^([^/]+)/?$" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
    <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
    <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
</conditions>
<action type="Rewrite" url="Vehicles/Vehicle-Detail.aspx?stockno={R:1}" />

enter image description here

enter image description here

enter image description here

1 个答案:

答案 0 :(得分:0)

您需要的是友好模式更独特的东西。如果您知道它总是数字,您可以:

<match url="^([\d]+)/?$" />

这只会与www.foo.com/{digits}匹配,并带有可选的斜杠。

另一种选择是将网址设置为www.foo.com/s/{stockno}/。使用/ s /你有一些独特的东西,你可以自信地匹配。 S只是stockno的一个例子,所以你可以使用你想要的东西。