Cómo hago que la reescritura de URL funcione con web.Lanzar.config transformar?


Tengo una red.regla de reescritura de configuración especificada para mover todo el tráfico a https. La regla funciona, pero no quiero que se requiera SSL mientras estoy depurando. Tengo un montón de web.lanzar.las transformaciones de configuración que ya se están haciendo funcionan en la publicación, así que decidí poner una regla de reescritura allí. El problema es que la regla de reescritura no se está transformando como el resto de los ajustes. Aquí está la web.configuración:

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

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

Y aquí está la transformación que se está haciendo:

  <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>

Si solo copie la regla de reescritura en la web.config funciona bien. ¿Alguien por ahí tiene alguna idea de por qué web.Lanzar.¿las transformaciones de configuración no funcionan solo para esta sección?

Author: Matthew Kruskamp, 2011-08-10

4 answers

La transformación solo ocurrirá si pones atributos xdt apropiados en los elementos que necesitan ser transformados. Intente agregar un atributo xdt:Transform a su configuración de lanzamiento:

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

Eso le dirá al motor de transformación que todo el elemento system.webServer de Web.config necesita ser reemplazado por el de Web.Release.config.

El motor de transformación ignorará silenciosamente cualquier elemento que no tenga atributos xdt.

Enlace obligatorio a MSDN .

 44
Author: Lobstrosity,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-08-10 22:58:10

Otra manera de ir sería poner en una condición de reescritura que niega si está en localhost:

<conditions>
    <add input="{HTTP_HOST}" pattern="localhost" negate="true"/>
</conditions>
 32
Author: citronas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-08-21 07:41:53
<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
Author: Ray Linder,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-11-10 22:02:58

Resumiendo otras respuestas aquí, descubrimos lo obvio: "Reemplazar" solo reemplazará un nodo, no "insertarlo" (gracias DigitalD por el camino correcto). El resto de nuestros archivos de transformación usan replace, por lo que optamos por una etiqueta vacía en nuestra web base.config (el que se transforma).

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

Idealmente habría "Sobrescribir" que Insertaría o Reemplazaría (o Eliminaría e Insertaría).

 2
Author: BlackjacketMack,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-09-10 20:18:33