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

私はこれを 2 つのルールでごまかすことができました。私が好きかもしれないほどきれいではありませんが、あなたは何ができますか?

<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 に答える