10

httpRedirectWeb.config ファイルでとを使用している場合rewrite、優先するルールを指定するにはどうすればよいですか?

たとえば、 のような一般的な catch all ルールがあるとしwildcard="*"ますが、 もあり、ルールだけが実行さwildcard="/news" destination="/new/news"れるように見えます。wildcard="*"

このような動作は Apache から取得できます。IIS に方法があるに違いないと思います。

4

2 に答える 2

13

優先順位は、指定された順序と同じです。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リクエストが書き換えられることを意味します。foo.aspx?bar=specialfoo.aspx?bar=123Rule1Rule2Rule3

このstopProcessing="true"属性により、他の一致ルールが実行されないことが保証されます (つまりRule2、 およびRule3)。

ソース: http://www.iis.net/learn/extensions/url-rewrite-module/url-rewrite-module-configuration-reference#Rules_Evaluation

IIS の各構成レベルには、0 個以上の書き換え規則を定義できます。ルールは、指定された順序で評価されます。URL 書き換えモジュールは、次のアルゴリズムを使用して一連のルールを処理します。

  1. 最初に、URL がルールのパターンと照合されます。一致しない場合、URL 書き換えモジュールはそのルールの処理を直ちに停止し、次のルールに進みます。
  2. パターンが一致し、ルールの条件がない場合、URL 書き換えモジュールは、このルールに指定されたアクションを実行してから、次のルールに進み、置換された URL をそのルールの入力として使用します。
  3. パターンが一致し、ルールの条件がある場合、URL 書き換えモジュールは条件を評価します。評価が成功すると、指定されたルール アクションが実行され、書き換えられた URL が後続のルールへの入力として使用されます。
于 2013-09-21T01:25:58.560 に答える