2017-12-28 29 views
1

非常に単純なURLリライトリダイレクトルールを使用して、無限ループに陥ります。失敗すると、「ページを表示できません」というエラーが表示されます。エラーをトラップするヒントやスクリプトの変更があれば感謝します。IISのURLリライトループ

<rewrite> 
    <rules> 
     <rule name="Test redirect" enabled="false" stopProcessing="true"> 
      <match url=".*" /> 
     <action type="Redirect" url="/pub/" appendQueryString="false" logRewrittenUrl="true" redirectType="Permanent" /> 
      <conditions logicalGrouping="MatchAny"> 
       <add input="{HTTP_HOST}" pattern="^mydomain.*(com|net)$" /> 
      </conditions> 
     </rule> 
    </rules> 
</rewrite> 
  • ルールは、wwwrootフォルダのweb.configファイルに位置しています。
  • ルールは、wwwroot/pub /フォルダのMVCアプリケーションにリダイレクトされます。
  • IISログは、要求がIISによって終了するまで、/ pub /フォルダがループ内で複数回呼び出されていることを示しています。
  • ルールが無効で、URLを直接入力すると正常に動作します。
  • 異なるブラウザでも同じエラーが発生します。
  • これはブラウザキャッシュの問題ではありません。

+0

ここにURL書き換えルールを貼り付けることはできますか? –

+0

いくつかの奇妙な理由で、stackoverflowは質問にルールを貼り付けることができません。たぶんそれは弾丸のポイントです。私はそれを下に貼り付けます。 –

+0

<= "false" をstopProcessing = "true" を有効にルール名= "テストリダイレクト"> <マッチURL = "*" /> \t <アクションタイプ= "リダイレクト" URL = "/パブ/ "addAttributes =" false "logRewrittenUrl =" true "redirectType =" Permanent "/> <条件論理グループ=" MatchAny ">

答えて

1

問題があることが判明しましたSSLに関連しています。 HTTPSリダイレクトには、次のように{HTTPS}条件が必要です。この条件がないと、https:\ URLにリダイレクトしようとするとルールがループします。また、https:\ URL全体をアクションに含める必要があります。

<rule name="Test redirect" enabled="true" stopProcessing="true"> 
    <match url=".*" /> 
    <action type="Redirect" url="https://yourdomain.com/pub/" appendQueryString="false" logRewrittenUrl="true" redirectType="Temporary" /> 
    <conditions logicalGrouping="MatchAll"> 
     <add input="{HTTP_HOST}" pattern="^yourdomain.*(com|net)$" /> 
     <add input="{HTTPS}" pattern="off" /> 
    </conditions> 
</rule> 
0

それは<match url=".*" />ディレクティブを経由してすべてのURLを上のマッチングですので、あなたのURLのリダイレクトルールは、複数回にヒットされているように思えます。 This post says thatstopProcessing='true'ディレクティブは、リダイレクトルールでは必ずしも機能しません。

Taking a look at a similar question、あなたはどの書き換えルールをトリガし、あなたの無限ループシナリオに入るのフラグメントmydomain.com/pubを持つ任意のURLを防ぐために、最初blockルールを追加したい場合があります:

<rule name="block" stopProcessing="true"> 
    <match url="^mydomain.*(com|net)/pub.*" /> 
    <action type="None" /> 
</rule> 
+0

ありがとうございました。でも、まだループしています。私はWebアプリケーションのフォルダにあるweb.configファイルでルールを使ってリダイレクトを行うことができます。しかし、ルールがwwwrootフォルダのweb.configに適用されていると、失敗するようです。何か案は? –