我需要一个ASP.NET url重写模块的正则表达式,它将满足以下测试用例?
products/ products.aspx?Atts=&Page=
products/att1/ products.aspx?Atts=att1/&Page=
products/att1/att2/ products.aspx?Atts=att1/att2/&Page=
products/2/ products.aspx?Atts=&Page=2
products/att1/2/ products.aspx?Atts=att1/&Page=2
products/att1/att2/2/ products.aspx?Atts=att1/att2/&Page=2
有人可以帮忙吗?
答案 0 :(得分:1)
我设法用两条规则来捏造这个。不像我想的那么漂亮,但你能做什么?
<rule name="ProductsPagingRule" stopProcessing="false">
<match url="^products([a-z0-9\-/]*)(?:/([0-9]+)/)"/>
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
</conditions>
<action type="Rewrite" url="products{R:1}/?Page={R:2}" />
</rule>
<rule name="ProductsRule" stopProcessing="true">
<match url="^products/([a-z0-9\-/]*)/" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
</conditions>
<action type="Rewrite" url="products.aspx?PageId={R:1}" />
</rule>
最近我提出的一条规则是:
^products(?=(?:(?:[a-z0-9\-/]*)/([0-9]+)/$)?)(.[a-z0-9\-/]*)
如果有人感到勇敢,我仍然有兴趣在一条规则中完成这项工作......
答案 1 :(得分:0)
这是一个尝试。这会强制执行尾部斜杠和非空的attx字符串。如果您不需要后者,请将([^/]+/)*
替换为(.*/)?
。
<rule source="products/(([^/]+/)*)([0-9]*)/$"
destination="products.aspx?Atts=$1&Page=$3"/>
<rule source="products/(([^/]+/)*)$"
destination="products.aspx?Atts=$1&Page="/>
(这似乎是ASP.NET中常用的URL重写规则的样式;我相信你可以改变它们以适应你正在使用的模块。)