0

我需要一个 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

任何人都可以帮忙吗?

4

2 回答 2

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\-/]*)

如果有人觉得勇敢的话,我仍然有兴趣在一条规则中看到这一点......

于 2012-08-10T14:47:41.803 回答
0

这是一个尝试。这确实会强制使用尾部斜杠和非空 attx 字符串。如果您不需要后者,请替换([^/]+/)*(.*/)?.

<rule source="products/(([^/]+/)*)([0-9]*)/$"
      destination="products.aspx?Atts=$1&amp;Page=$3"/>
<rule source="products/(([^/]+/)*)$"
      destination="products.aspx?Atts=$1&amp;Page="/>

(这似乎是 ASP.NET 中常用的 URL 重写规则样式;我相信您可以更改它们以适应您正在使用的模块)。

于 2012-08-10T14:09:04.577 回答