3

私のプロジェクトでは、私の /PropertDetail.aspx は 2 つのクエリ文字列を取得できます。

PropertyId の1つ目/PropertDetail.aspx?PropertyId=5

言語の2つ目/PropertDetail.aspx?PropertyId=5&Language=2

編集:このページはそれらの 1 つまたは両方を取得できるため、リライター ルールはそれらの両方を処理する必要があります。

だから、私はこれらのルールをweb.configに設定しました

<rewriter>
        <rewrite url="^(/.+(\.gif|\.png|\.jpg|\.ico|\.pdf|\.css|\.js)(\?.+)?)$" to="$1" processing="stop" />
        <rewrite url="^/(.+)-(.+).aspx$" to="/PropertyDetail.aspx?PropertyId=$2" processing="stop"/>
        <!--http://localhost:1562/Harika-Gayrimenkul-5.aspx-->
        <rewrite url="^/(.+)-(.+)-(.+).aspx$" to="/PropertyDetail.aspx?PropertyId=$2&#038;Language=$3" processing="stop"/>
        <!--http://localhost:1562/Great-Property-5-2.aspx-->
</rewriter>

Language クエリ文字列がなくても問題ありませんが、Language クエリ文字列がある場合は、LanguageではなくPropertyIdとして 3 番目の式を取得します。

同じページに対してこれら 2 つのルールを定義するにはどうすればよいですか?

ありがとう

4

3 に答える 3

3

組み合わせた答え:

<rewriter>
    <rewrite url="^(/.+(\.gif|\.png|\.jpg|\.ico|\.pdf|\.css|\.js)(\?.+)?)$" to="$1" processing="stop"/>
    <rewrite url="^.+?([\d]+?)-([\d]+?)\.aspx$" to="/PropertyDetail.aspx?PropertyId=$1&amp;Language=$2" processing="stop"/>
    <rewrite url="^.+?-([\d]+?)\.aspx$" to="/PropertyDetail.aspx?PropertyId=$1" processing="stop"/>

</rewriter>

現在、多くの組み合わせでうまく機能しています。

/This-is-a-really-long-property-title-555-12

PropertyId=555 および Language=12 を返します。

/This-is-another-really-long-property-title-666

PropertyId=666 を返します。

于 2009-02-22T14:57:09.243 に答える
2

疑問符を追加して、一致の 2 番目のパラメーター (言語値) をオプションにします。

編集:これは、質問を少し誤解していることに気付いた後に作成された修正版です。

<rewriter>
  <rewrite url="\.(?:gif|png|jpg|ico|pdf|css|js)(?:\?.*)?$" to="$0" processing="stop"/>
  <rewrite url="(\d+)(?:-?(\d+)?)\.aspx$" to="/PropertyDetail.aspx?PropertyId=$1&amp;Language=$2" processing="stop"/>
</rewriter>

これは、OP が機能しているもののクリーンアップされた合理化されたバージョンです。次の形式で出力が生成されます。

/PropertyDetail.aspx?PropertyId=12345&Language=1 (言語が存在する場合)
/PropertyDetail.aspx?PropertyId=12345&Language= (そうでない場合)

ノート

  • 入力文字列全体を実際に照合する必要なく、入力文字列全体を参照するための $0 後方参照の使用
  • 後で値を取得したくないため、一致グループに保存する必要のないものに対する非キャプチャ グループ (?:...) の使用
  • 1 つの引数と 2 つの引数の URL の個別のルールを 1 つのルールにまとめる

答えの元のバージョン:

<rewriter>
  <rewrite url="^/(.+?)-(.+?)-?(.+?)?\.aspx$" to="/PropertyDetail.aspx?PropertyId=$2&amp;#038;Language=$3" processing="stop"/>
</rewriter>
于 2009-02-22T15:32:29.143 に答える
1

これが私たちが思いついた最終的な解決策です。

<rewriter>
    <rewrite url="^(/.+(\.gif|\.png|\.jpg|\.ico|\.pdf|\.css|\.js)(\?.+)?)$" to="$1" processing="stop"/>
    <rewrite url="^.+?([\d]+?)-([\d]+?)\.aspx$" to="/PropertyDetail.aspx?PropertyId=$1&amp;Language=$2" processing="stop"/>
    <rewrite url="^.+?-([\d]+?)\.aspx$" to="/PropertyDetail.aspx?PropertyId=$1" processing="stop"/>
</rewriter>
  • 最初のルールは、必要のないファイル タイプに関するものです。
  • 2番目のルールは、「ページが2つのクエリ文字列を取得した場合」に関するものです
  • 3番目のルールは、ページがクエリ文字列を1つだけ取得するかどうかに関するものです

teknohippyJasonMArcherにご協力いただき、誠にありがとうございます。

于 2009-02-22T20:42:08.383 に答える