web-dev-qa-db-ja.com

IIS書き換えが機能しません(ただし、リダイレクトは機能します)

Rewrite Module 2.を使用してURLの書き換えを試してみましたが、うまくいきませんでした。私がやろうとしていることは、IIS(またはネットワーク上の別のサーバー上)でホストされている他のアプリケーションへのポート80でのWebアプリへのすべての呼び出しを書き換えることです。 IIS次のルールを作成しました:

<rewrite>
    <rules>
        <rule name="ReverseProxyInboundRule1" stopProcessing="true">
            <match url="site1/(.*)" />
            <action type="Rewrite" url="http://localhost:7001/{R:1}" />
        </rule>
    </rules>
</rewrite>

静かですが、残念ながら機能しません。一方、アクションタイプをRedirectに変更すると、正常に動作します。

何が問題でしょうか?

22
Kassem

私は昨日同じ問題に出くわし、理解するのに長い時間がかかりました。

ここで重要なのは、書き換えアクションにhttp://プレフィックスがあることです。これにより、Application Request Routingで処理する必要がある特別なケースになります。最初のステップは、Application Request Routingモジュールがインストールされていることを確認することです。このモジュールは https://www.iis.net/downloads/Microsoft/application-request-routing にあります。これがインストールされたら、IIS Webサーバー(Webサイトの1つ上のレベル))に移動し、Application Request Routingキャッシュ機能を開きます。右側のアクションから、Server.Proxy.Settingsをクリックし、[プロキシを有効にする]チェックボックスがオンになっていることを確認します。これにより、URL書き換えタスクをApplication Request Routingに再ルーティングでき、リバースプロキシが外部リクエストに対して機能するはずです。

このアイデアは、2009年の優れたブログ投稿に基づいています。 http://ruslany.net/2009/04/10-url-rewriting-tips-and-tricks/

42
Rob Lyndon

同じ問題を解決しようとしていたときに、この古い投稿を偶然見つけました。

解決しました!

IIS Services ManagerのURL書き換え機能を使用して、わかりやすいURLルールを作成しました。

これは問題なく動作し、web.configファイル(wwwルート)のルールを見ると、リダイレクトする1つのルールと書き換える1つのルールが表示されていました。

これを1試合に合うように編集しました。次に、このコードを複製して、それぞれの製品IDを編集しました。以下の例:

<rule name="RedirectUserFriendlyURL1" stopProcessing="true">
    <match url="^product\.php$" />
    <conditions>
        <add input="{REQUEST_METHOD}" pattern="^POST$" negate="true" />
        <add input="{QUERY_STRING}" pattern="^id_product=\b35\b" />
    </conditions>
    <action type="Redirect" url="990mm-bohemia-cast-iron-electric-radiator" 
            appendQueryString="false" />
</rule>

最初のルールは、URLで文字列"product.php""id_product=35"を検索し、次に、現在存在しない"990mm-bohemia-cast-iron-electric-radiator"にリダイレクトします。次に(下記参照)

<rule name="RewriteUserFriendlyURL1" stopProcessing="true">
    <match url="^\b990mm-bohemia-cast-iron-electric-radiator\b" />
    <conditions>
        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
    </conditions>
    <action type="Rewrite" url="product.php?id_product=35" />
</rule>

このルールは、"product.php?id_product=35"ビットを「990mm-bohemia-cast-iron-electric-radiator」に書き換えて、リダイレクトの新しい場所を作成します。

3
DANINTHETOON

MVCルーティングがリクエストを盗まないことを確認してください。それが起こらないようにするには、書き換えようとしているルートを無視してください:

RouteTable.Routes.Ignore("blog/{*pathInfo}");

刺激: https://sitecore.stackexchange.com/questions/3645/how-to-setup-a-reverse-proxy-with-sitecore

0
DdW

URLの書き換えで404エラーが発生しました。たぶん、あなたはそれが便利であるとわかるでしょう。 https://stackoverflow.com/a/47988082/578454 で確認してください

0
Riddik