web-dev-qa-db-ja.com

URL書き換えをweb.Release.configトランスフォームで機能させるにはどうすればよいですか?

すべてのトラフィックをhttpsに移動するように指定されたweb.config書き換えルールがあります。ルールは機能しますが、デバッグ中にSSLを要求したくありません。私は、web.release.config変換の束を既に公開して動作しているので、そこに書き換えルールを入れることにしました。問題は、書き換えルールが他の設定のように変換されないことです。これがweb.config設定です:

<system.webServer>
    <validation validateIntegratedModeConfiguration="false"/>
    <modules runAllManagedModulesForAllRequests="true"/>

    <rewrite></rewrite>
</system.webServer>

そして、これが行われている変換です:

  <system.webServer>
<rewrite>
  <rules>
    <rule name="Redirect HTTP to HTTPS" stopProcessing="true">
      <match url="(.*)"/>
      <conditions>
        <add input="{HTTPS}" pattern="^OFF$"/>
      </conditions>
      <action type="Redirect" url="https://{HTTP_Host}/{R:1}" redirectType="SeeOther"/>
    </rule>
  </rules>
</rewrite></system.webServer>

書き換えルールをweb.configにコピーするだけで問題ありません。 web.Release.config変換がこのセクションでのみ機能しない理由はありますか?

45

変換は、変換が必要な要素に適切なxdt属性を配置した場合にのみ発生します。リリース構成にxdt:Transform属性を追加してみてください:

<system.webServer xdt:Transform="Replace">
    <!-- the rest of your element goes here -->
</system.webServer>

これにより、変換エンジンに、system.webServerWeb.config要素全体をWeb.Release.configの要素で置き換える必要があることが通知されます。

変換エンジンは、xdt属性を持たない要素を警告なしに無視します。

[〜#〜] msdn [〜#〜] への必須リンク。

44
Lobstrosity

もう1つの方法は、localhostを使用している場合に無効になる書き換え条件を設定することです。

<conditions>
    <add input="{HTTP_Host}" pattern="localhost" negate="true"/>
</conditions>
33
citronas
<system.webServer>
    <rewrite>
        <rules xdt:Transform="Replace">
            <clear />
            <rule name="Redirect HTTP to HTTPS" stopProcessing="true">
              <match url="(.*)" />
              <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
                <add input="{HTTP_Host}" pattern="localhost(:\d+)?" negate="true" />
                <add input="{HTTP_Host}" pattern="127\.0\.0\.1(:\d+)?" negate="true" />
                <add input="{HTTPS}" pattern="OFF" />
              </conditions>
              <action type="Redirect" url="https://{HTTP_Host}/{R:1}" redirectType="SeeOther" />
            </rule>
        </rules>          
    </rewrite>
</system.webServer>
9
Ray Linder

ここで他の回答を要約すると、「置換」はノードを置き換えるだけであり、「挿入」するのではないという明らかなことを発見しました(正しいトラックについてはDigitalDに感謝します)。残りの変換ファイルはreplaceを使用するため、ベースのweb.config(変換されるもの)で空のタグを選択しました。

<system.webServer>
...other tags here that do not get transformed...
<rewrite />
</system.webServer>

理想的には、挿入または置換(または削除および挿入)する「上書き」があるはずです。

2
BlackjacketMack