2016-09-16 10 views
1

特定のルールに一致するすべてのHTTPおよびHTTPS要求を実際のサイトにリダイレクトし、リダイレクトのみを行う必要があるため、サーバーレベルでURL書き換えを実装しましたユーザーが実際のサイトにアクセスしている場合ルールは最初は正常に動作します。しかし、実際のサイトでCtrl + Rキーを繰り返し押すと、私のサイトにアクセスできなくなるようです。 「このページを表示できません」というエラーがユーザーに返されます。このテストは、Windows x64上のIE 11ブラウザーで行われ、WebサーバーはWindows Server 2012 R2上のIIS 8.5です。リダイレクトで返されるHTTP応答コードは307と設定されています。URLリライトにより「このページを表示できません」

私のIISサーバーでFailed Request Routingをオンにすると、失敗した要求ログのREWRITE_DISABLED_KERNEL_CACHEに警告メッセージが表示されます。これは、ページが「このページを表示できません」を返すときです。

URL書き換えルールを無効にすると、すぐにHTTPとHTTPSサイトの両方にアクセスできるようになり、リダイレクトが機能しなくなったことを確認しました。その後も同じルールを有効にしますが、HTTPSサイトでのみ有効になります。要求は次の例のURLのいずれかに当たる場合

次のとおり

は基本的に私のリダイレクションルール

<system.webServer> 
    ... 
    <rewrite> 
     <globalRules> 
      <clear /> 
      <rule name="HTTPS to HTTP" enabled="true" stopProcessing="true"> 
       <match url="^(downloads?/?)?$" /> 
       <conditions logicalGrouping="MatchAll" trackAllCaptures="false"> 
        <add input="{REQUEST_URI}" pattern="http://.*?/downloads/" negate="true" /> 
       </conditions> 
       <action type="Redirect" url="http://{HTTP_HOST}/downloads/" appendQueryString="false" redirectType="Temporary" /> 
      </rule> 
     </globalRules> 
     <outboundRules> 
     </outboundRules> 
    </rewrite> 
    ... 
</system.webServer> 

で、私はそれらをリダイレクトします:

1)http://fqdn/download

2)http://fqdn/download/

3)https://fqdn/downloads

4)https://fqdn/downloads/

5)https://fqdn/download

6)https://fqdn/download/

要求が直接私のサイトヒットした場合、私は、リダイレクトされません。

私は私の実際のサイトに当たった、私はrエッジ編集ルールはまだ適用されています。だから私はそこに2つの異なる問題があるかもしれないと思う。

1)要求がhttp://fqdn/downloads/

2に送信されたときに適用されている無限のリダイレクションルール)REWRITE_DISABLED_KERNEL_CACHE

答えて

0

といくつかの未知の問題あなたが原因REQUEST_URIについてのあなたの間違ったassumptationの無限のリダイレクトとのトラブルにいますHTTPSチェックの欠如。

{REQUEST_URI}スラッシュ(welldocumentedされていない)とクエリ文字列を含むURLパスが、含まれ、URIスキームまたはホスト名が含まれていません。だから、あなたは偽陽性です。

HTTP(S):// <ホスト>:<ポートここ> /<path>?<querystring>

は自明ルールです。

<rule name="Force Http downloads page" stopProcessing="true"> 

    <!-- If the url starts with download or downloads with an optional trailing slash --> 
    <match url="^downloads?/?$" /> 

    <!-- Redirect --> 
    <action type="Redirect" url="http://{HTTP_HOST}/downloads/" appendQueryString="false" redirectType="Temporary" /> 

    <!-- When --> 
    <conditions logicalGrouping="MatchAny"> 
     <!-- REQUEST_URI does not start with "/downloads/" --> 
     <add input="{REQUEST_URI}" pattern="^/downloads/" negate="true" /> 

     <!-- Or --> 

     <!-- HTTPS is not off --> 
     <add input="{HTTPS}" pattern="^off$" negate="true" /> 
    </conditions> 
</rule> 

希望します。

+1

あなたは命の恩人です!しかし、少し変わった。 REQUEST_URIを使用する代わりに、URLを使用するように切り替えました。少なくとも、私はもう少し詳しく文書化された変数を使用しています。 –

+0

@louisxieクエリ文字列ジョブがないので、それは良い呼び出しです。 –

+0

何らかの理由で、新しいルールがhttps:// /とhttps:// /を目的のサイトにリダイレクトできませんでした。これは、IISが{URL}条件をtrueとして適用し、{HTTPS}条件をfalseとして評価するためです。そこで、適用されたすべての条件を削除し、置き換えました。

関連する問題