web-dev-qa-db-ja.com

IIS URL Rewrite Module:QueryStringに基づくリダイレ​​クト

クエリ文字列パラメーターに基づく別のURLへのリダイレクトに問題があります。 www.domain.com/signup.aspx?p=1と入力したユーザーを次の場所にリダイレクトしたい:

www.domain.com/signup

<rule name="Signup Redirect 1" stopProcessing="true">
  <match url="signup\.aspx\?p=1" />
  <conditions logicalGrouping="MatchAll" />
  <action type="Redirect" url="signup" redirectType="Temporary" />
</rule>

ここで、www.domain.com/signup.aspx?p = 2と入力すると、次の場所に移動する必要があります。

www.domain.com/signup/promocode

<rule name="Signup Redirect 2" stopProcessing="true">
  <match url="signup\.aspx\?p=2" />
  <conditions logicalGrouping="MatchAll" />
  <action type="Redirect" url="signup/promocode" redirectType="Temporary" />
</rule>

上記のルールは機能しません。これを行う正しい方法は何ですか?前もって感謝します。

Gr

マルティン

27
Martijn B

これが少し良く機能するかどうかを確認してください:

<rule name="Signup Redirect 1" stopProcessing="true">
  <match url="signup\.aspx$" />
  <conditions>
    <add input="{QUERY_STRING}" pattern="p=1" />
  </conditions>
  <action type="Redirect" url="signup" redirectType="Temporary" />
</rule>

<rule name="Signup Redirect 2" stopProcessing="true">
  <match url="signup\.aspx$" />
  <conditions>
    <add input="{QUERY_STRING}" pattern="p=2" />
  </conditions>
  <action type="Redirect" url="signup/promocode" redirectType="Temporary" />
</rule>
31
Nick Craver

値を使用して宛先を選択するより堅牢な方法は、書き換えマップを使用することです。マップは基本的にルックアップテーブルです。これは、すべての新しいパスに対して新しいルール(およびすべてのリクエストのパターンに対するURLの追加評価)を必要としません。

<rules>
  <rule name="Signup Redirect Map" stopProcessing="true">
    <match url="^signup\.aspx$" />
    <conditions logicalGrouping="MatchAll" trackAllCaptures="true">
      <add input="{QUERY_STRING}" pattern="p=([^&amp;]+)" />
      <add input="{Signups:{C:1}}" pattern="(.+)" />
    </conditions>
    <action type="Redirect" url="{C:2}" redirectType="Temporary" />
  </rule>
</rules>
<rewriteMaps>
  <rewriteMap name="Signups">
    <add key="1" value="signup" />
    <add key="2" value="signup/promocode" />
    <add key="3" value="signup/newcode" />
    <add key="n" value="signup/futureproof" />
  </rewriteMap>
</rewriteMaps>

定義:

  • {C:1}は、最初に一致した条件、つまりクエリ文字列値への後方参照です。
  • {Signups:{C:1}}は、Signupsマップで{C:1}を検索するための指示です。
  • {C:2}は、2番目の条件一致への後方参照です:サインアップマップからの値。
38
jpj625