書き換えマップを理解するのを手伝ってください、私はこの設定をしています:
<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>
これらのページにアクセスしようとすると、これは機能しています:
しかし、私はこれらのページのいずれかにクエリ文字列を追加する可能性を望んでいます、例:
このページにアクセスしようとすると、404が表示されます。これを機能させるにはどうすればよいですか?
デフォルトでは、書き換えマップを使用する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>
使用する代わりに
<add input="{MyMap:{URL}}" pattern="(.+)" />
あなたも試すことができます
<add input="{MyMap:{SCRIPT_NAME}}" pattern="(.+)" />
こちらをご覧ください: