2013-09-21 4 views
6

Web.configファイルにhttpRedirectrewriteを使用している場合、どのルールを優先するかを指定するにはどうすればよいですか?IISリダイレクトルールの優先度

たとえば、wildcard="*"のような一般的なキャッチルールがありますが、wildcard="/news" destination="/new/news"もあるとしますと、wildcard="*"ルールが実行されたようです。

Apacheからこのような動作を取得することは可能です。私はIISに方法がなければならないと思います。

答えて

7

優先度は、指定した順序と同じです。IISマネージャーには、「上に移動」および「下に移動」ボタンがあります。例えば

<?xml version="1.0" encoding="UTF-8"?> 
<configuration> 
<system.webServer> 
<rewrite> 
    <rules> 
     <rule name="Rule1" stopProcessing="true"> 
      <match url="^foo/?bar=123"/> 
      <action type="Rewrite" url="foo.aspx?bar=special" appendQueryString="false" /> 
     </rule> 
     <rule name="Rule2" stopProcessing="true"> 
      <match url="^foo/?bar=([A-z0-9]+)"/> 
      <action type="Rewrite" url="foo.aspx?bar={R:1}" appendQueryString="false" /> 
     </rule> 
     <rule name="Rule3" stopProcessing="true"> 
      <match url="^foo/"/> 
      <action type="Rewrite" url="somethingElse.aspx" appendQueryString="false" /> 
     </rule> 
    </rules> 
</rewrite> 
</system.webServer> 
</configuration> 

/foo?bar=123の着信要求を考えます。この例では

Rule1が最初であるので、それは、要求がRule2、それは同時にRule1と一致するにもかかわらず、foo.aspx?bar=special代わりのfoo.aspx?bar=123に書き換え、そしてRule3されることを意味します。

属性stopProcessing="true"は、他の一致規則が実行されないようにします(つまり、Rule2およびRule3)。

出典:http://www.iis.net/learn/extensions/url-rewrite-module/url-rewrite-module-configuration-reference#Rules_Evaluation

IISの各構成レベルは、定義されたゼロ個以上のリライトルールを持つことができます。 ルールは、と同じ順序で評価されます。 URL書き換えモジュールは、次のアルゴリズムを使用して一連のルールを処理します。

  1. 最初に、URLはルールのパターンと照合されます。一致しない場合、URL書き換えモジュールはそのルールの処理を直ちに停止し、次のルールに進みます。
  2. パターンが一致し、ルールの条件がない場合、URL書き換えモジュールはこのルールに指定されたアクションを実行し、次のルールに進みます。このルールでは、置換されたURLがルールの入力として使用されます。
  3. パターンが一致し、ルールの条件がある場合、URL書き換えモジュールは条件を評価します。評価が成功した場合は、指定されたルールのアクションが実行され、その後、書き換えられたURLは、web.configファイルのコンテキストでこれを説明することができ、その後のルール
+0

への入力として使用されていますか?私はguiについて何も知らない。 – tau

+1

@タウ私は自分の答えを更新しました。 – Dai

+0

ありがとうございます!私はこれをできるだけ早く試みます。 – tau