IISの書き換え、マップとクエリ文字列の書き換え


10

書き換えマップを理解するのを手伝ってください、私はこの設定をしています:

<rewriteMap name="MyMap">
   <add key="/pages" value="/website/pages/index.aspx" />
   <add key="/pages/page-1" value="/website/pages/page-1/index.aspx" />
   <add key="/pages/page-1/section-1" value="/website/pages/page-1/section-1.aspx" />
</rewriteMap>

これが私のルールです:

<rule name="Rewrite rule for MyMap" stopProcessing="true">
   <match url=".*" />
   <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
      <add input="{MyMap:{REQUEST_URI}}" pattern="(.+)" />
   </conditions>
   <action type="Rewrite" url="{C:1}" appendQueryString="true" />
</rule>

これらのページにアクセスしようとすると、これは機能しています:

  • www.mydomain.com/pages(OK)
  • www.mydomain.com/pages/page-1(OK)
  • www.mydomain.com/pages/page-1/section-1(OK)

しかし、私はこれらのページのいずれかにクエリ文字列を追加する可能性を望んでいます、例:

  • www.mydomain.com/pages?page=1(FAIL)

このページにアクセスしようとすると、404が表示されます。これを機能させるにはどうすればよいですか?

回答:


12

デフォルトでは、書き換えマップを使用するURL書き換えルールは、{REQUEST_URI}変数に一致するように作成されます。これには、URL +クエリ文字列が含まれます。これにより、クエリ文字列パラメータを持つURLと照合して、他のページに書き直すことができます。とても便利ですが、これは明らかにあなたが望む/必要とするものではありません。

クエリ文字列を使用せずに、URLのみと照合したい場合。これを変更するには、条件の{REQUEST_URI}{URL}に置き換える必要があります。次に、URL(クエリ文字列なし)のみが書き換えマップと照合されます。次に、クエリ文字列を書き換えられたURLに追加して、実行されたスクリプトが引き続きアクセスできるようにします。

あなたは次のようなルールに終わります:

<rule name="Rewrite rule for MyMap">
    <match url=".*" />
    <conditions>
        <add input="{MyMap:{URL}}" pattern="(.+)" />
    </conditions>
    <action type="Rewrite" url="{C:1}" appendQueryString="true" />
</rule>

1
素晴らしい説明。QueryStringを一致の目的で無視する方法も不思議に思っていました。
dthrasher 2013年

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.