web-dev-qa-db-ja.com

IIS urlrewriteを使用してフォルダをリダイレクトするときに問題が発生する

Url Rewriteを使用して、/ foo_bar/*を/ foo/*にリダイレクトしようとしています。私はこれを試しました:

<rule name="Redirect foo_bar to foo" stopProcessing="true">
    <match url="(.*)" />
    <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
        <add input="{HTTP_URL}" pattern="^/foo_bar/(.*)" />
    </conditions>
    <action type="Redirect" url="/foo/{R:1}" />
</rule>

しかし、これは/ foo/foo_bar/*にリダイレクトするだけです。どこが間違っているのですか?

2
Jonathan

まず、すべてのリクエスト(。*)に一致するルールを指定してから、特定のURLの条件を追加します。

試合には制限基準が必要です。

<match url="^/foo_bar/(.*)" />

その後、条件はもう必要ありません。条件は、URLに基​​づかない追加の基準にのみ使用します。

次に、{R:1}は一致したURL全体を参照するため、URLに/foo_bar/が含まれている場合、それが{R:1}に含まれているため、/ foo/foo_bar /にリダイレクトされる理由が説明されます。

新しい一致ルールでは、{R:1}はURL全体ではなく、(.*)にあるものを保持するため、機能するはずです。

4
Peter Hahndorf