2016-09-19 7 views
0

私は、いくつかのIISリダイレクトルールを働かせようと試みている私の頭をレンガの壁に対して叩いていました。 Stack OverflowとIIS.netで検索して読みましたが、まったく動作しません。IISリライトモジュール - 保守パスとクエリ文字列をリダイレクトするが、追加のクエリ文字列パラメータを追加する方法は?

私は自分のローカル(実際の)IISで試していますが、私は書き換え2.0モジュールをインストールしており、修復をインストールしようとしました。私は、adminのcmd行でiisresetを何度もやったことが気になるよりもずっとやりました。

私のホストファイルには、URL my.test.comに対して127.0.0.1が設定されています。

私が達成したいのは、既存のパスとクエリーストリング値が存在する場合は、それを維持しながら、追加のクエリーストリングパラメータでサブドメインURLをメインドメインURLにリダイレクトすることです。ウェブサイトのルートフォルダにある

Iセットアップ3つのルールを次のように

<system.webServer> 
    <rewrite> 
     <rules> 
      <rule name="PathAndQueryString" enabled="true" stopProcessing="true"> 
       <match url="(/\w*)(\?\w*=\w*)([&amp;\w*=\w*]*)" /> 
       <action type="Redirect" url="https://www.test.com{R:1}{R:2}{R:3}&amp;param=value" appendQueryString="false" /> 
       <conditions logicalGrouping="MatchAll" trackAllCaptures="false"> 
        <add input="{HTTP_HOST}" pattern="my.test.com" /> 
       </conditions> 
      </rule> 
      <rule name="Querstring" enabled="true" stopProcessing="true"> 
       <match url="(\?\w*=\w*)([&amp;\w*=\w*]*)" /> 
       <action type="Redirect" url="https://www.test.com{R:1}{R:2}&amp;param=value" appendQueryString="false" /> 
       <conditions> 
        <add input="{HTTP_HOST}" pattern="my.test.com" /> 
       </conditions> 
      </rule> 
      <rule name="DomainOnly" enabled="true" stopProcessing="true"> 
       <match url=".*" /> 
       <action type="Redirect" url="https://www.test.com?param=value" appendQueryString="false" /> 
       <conditions> 
        <add input="{HTTP_HOST}" pattern="my.test.com" /> 
       </conditions> 
      </rule> 
     </rules> 
    </rewrite> 
</system.webServer> 

残念ながらパターンをテストし、{Rを:x}は確認にもかかわらず、私が使用してこれをテストしようとすると、キャプチャが正しいですエッジ、クロム、FirefoxとIEのすべてのためのルールは存在しないように動作します。

テスト:

なしには、彼らがリダイレクトせずに務めます。

また、一致パターンの一部として使用されている条件パターンを入れてみましたが、どちらかで動作しませんでした。実際には、ルールがサイトのルートにあるときにホストを含​​まないが、何も動作しないと言ったスタックオーバーフローポストを読んだ後に、条件に移動しました。

ご協力いただければ幸いです。

UPDATE 1:パスとクエリ文字列ルールのは(/ワット\ *)は、このパターンの開始から太字の一部を除去することを試みました。何の効果もありませんでした。

UPDATE 2:機能を「失敗した要求トレース」非常に気質を有効にしようとしましたし、それが実際に働いているとき、それはマッチのURLパターンのどれもが、今では蹴り開始した第三のルールを除いて、一致していないことを言うと、リダイレクトされますが、明白な理由のためにパスと他のクエリ文字列のパラメータを維持していません。

UPDATE 3:エッジとIEでは、どのルールもまったく機能しません。 ChromeとFFでは、ドメインのみのリダイレクトが機能しているように見えますが、ドメインのみのルールを無効にしてIISを再起動すると、ルールがまだ存在するように動作します.FFSはこの酷い勢いで私の血を沸騰させますそれほど難しいことではありません。

答えて

1

私が答えを出す前に、iisでこの投稿のコピーに回答したMicrosoftのYuk Dingに叫びました。ネットフォーラムを開き、答えのほとんどを提供しました。

URLを1つのURLから別のURLにリダイレクトするルールを書き換えて、パスとクエリ文字列が存在する場合はそれらを同時に保持しながら、同時にハードコードされたURLパラメータを適切な&または?あなたが必要とするルールはここにあります。

my.test.comからwww.test.comにリダイレクトされるルールでは、以下のルールでこれらの2つのURLを置き換える必要があるだけでなく、ハードコードされたパラメータ「ExtraParam = SomeValue」をあなたが必要なもの。私の目には

<system.webServer> 
<rewrite> 
    <rules> 
     <rule name="DomainOnly" enabled="true" stopProcessing="true"> 
      <match url="(.*)" /> 
      <conditions trackAllCaptures="true"> 
       <add input="{HTTP_HOST}" pattern="my.test.com" /> 
       <add input="{REQUEST_URI}" pattern="/.+" negate="true" /> 
      </conditions> 
      <action type="Redirect" url="http://www.test.com?ExtraParam=SomeValue" redirectType="Temporary" /> 
     </rule> 
     <rule name="PathOnly" enabled="true" stopProcessing="true"> 
      <match url="(.*)" /> 
      <conditions trackAllCaptures="true"> 
       <add input="{REQUEST_URI}" pattern="/.+" /> 
       <add input="{REQUEST_URI}" matchType="Pattern" pattern="\?.+" ignoreCase="true" negate="true" /> 
       <add input="{HTTP_HOST}" pattern="my.test.com" /> 
      </conditions> 
      <action type="Redirect" url="http://www.test.com{C:0}?ExtraParam=SomeValue" redirectType="Temporary" /> 
     </rule> 
     <rule name="Querstring" stopProcessing="true"> 
      <match url="(.*)" /> 
      <conditions trackAllCaptures="true"> 
       <add input="{REQUEST_URI}" pattern="/.+" /> 
       <add input="{QUERY_STRING}" pattern=".*" /> 
       <add input="{HTTP_HOST}" pattern="my.test.com" /> 
      </conditions> 
      <action type="Redirect" url="http://www.test.com{C:0}&amp;ExtraParam=SomeValue" appendQueryString="false" redirectType="Temporary" /> 
     </rule> 
    </rules> 
</rewrite> 

URL書き換えモジュール2.0にはバグがあります。基本的な要点は、あなたが条件ですべてをやらなければならない主なマッチパターンで何かをマッチさせることができないということです。あなたが(。*)以外のものとマッチさせようとすると、元のようなものにマッチすると、あなたが望むやり方をしなくても効果的にヘッドアップを引き起こすので、マッチのパターンを設定できるという事実は全く無意味です。バッシング・レンガの壁のネス。

さらに厄介なことは、IISマネージャーでは、このUIが非常に役に立たないということです。あなたはパターンをテストすることができます - そして私は行いました - そしてそれらはうまくいくでしょうが、本当にテストしているのはregExパターンだけです。

本当に必要なのは、ルールレベルでのテストです。言い換えれば、URLを入力すると、いずれかのルールが一致し、どの条件が合格したか失敗したかがわかります。はい、失敗したリクエストトレースルールを有効にした場合はこの情報を得ることができますが、これは長年にわたるファフであり、やりがいのある方法で動作します(以前のログをクリアしてログを止めてから、もう一度)、些細でなければならないことがあります。

関連する問題