1

次のような書き換えルールを作成しようとしています。

~/company_search.aspx?cat=987&page=2&loc=1234

~/company_category/987/estiatoria/?loc=1234&page=2

私の書き換えルールは次のとおりです。

<rule name="Company Category">
<match url="company_category/([0-9]+)/(?:[^/]*)/?" />
<action type="Rewrite" url="company_search.aspx?cat={R:1}" appendQueryString="true" />
</rule>

サンプルの書き換えられた URL の /estiatoria/ の部分は、seo 最適化のオプションであり、実際のクエリ文字列では指定されておらず、他の用途もありません。ポストバックを実行すると、値が 987,987 の cat パラメータが 2 回取得され、サーバー側のコードがめちゃくちゃになります。

そのため、 cat パラメータを除外して他のすべてを追加するために、クエリ文字列を手動で追加しようとしました。そこで、ルールを次のように変更しました。

<rule name="Company Category">
<match url="company_category/([0-9]+)/(?:[^/]*)/?(?:\?|&amp;)?(.*)" />
<action type="Rewrite" url="company_search.aspx?cat={R:1}&amp;{R:2}" appendQueryString="false" />
</rule>

しかし、クエリ文字列には cat 以外の値はありません。私は何か間違ったことをしていますか?

アップデート:

cat パラメータを除外して残りの一致結果を追加するには、クエリ文字列条件を追加する必要があると思います。したがって、クエリ文字列の場合:

?cat=987&page=2&loc=1234

私は取得したい:

?page=2&loc=1234

cat パラメータは任意の順序で指定することも、存在しないこともできます。

私は試した:

<rule name="Company Categories Search">
<match url="company_category/([0-9]+)/(?:[^/]*)/?" />
<conditions>
    <add input="{QUERY_STRING}" pattern="(?!cat=[0-9]+)(.*)(cat=[0-9]+|$)(?!cat=[0-9]+)(.*)" />
</conditions>
<action type="Rewrite" url="company_search.aspx?cat={R:1}&amp;{C:1}&amp;{C:3}" appendQueryString="false" />
</rule>

URLにアクセスすると:

~/company_category/987/estiatoria/?page=2&loc=1234

サーバー側の Request.Querystring で次の値を取得します。

cat=987&page=2&loc=1234&

しかし、ポストバックを行うと、次のようになります。

cat=987&at=987&page=2&loc=1234&

誰かがその最後の正規表現条件で私を助けてくれますか?

更新 2:

私は解決策にたどり着きましたが、すべてのシナリオをカバーしているわけではありません:

<rule name="Company Categories Search">
<match url="company_category/([0-9]+)/(?:[^/]*)/?" />
<conditions logicalGrouping="MatchAny">
    <add input="{QUERY_STRING}" pattern="(cat=[0-9]+)(.*)" />
    <add input="{QUERY_STRING}" pattern="(^)(.*)" />
</conditions>
<action type="Rewrite" url="company_search.aspx?cat={R:1}&amp;{C:2}" appendQueryString="false" />
</rule>

1 つを一致させるために、MatchAny オプションで 2 つの条件ルールを使用しました: cat 値がマップされた URL (現在はポストバックのみ) に存在する場合のクエリ文字列と、2 つ: 存在しない場合。

cat パラメーターが何らかの形で page パラメーターと loc パラメーターの間にある場合、前のパラメーターはクエリ文字列に含まれません。誰かがより良い解決策を持っている場合は、私に知らせてください。

4

0 に答える 0