Установить заголовок из перезаписи URL-адреса на веб-сайтах Azure — AppCmd ​​или applicationhost.config?

Я хотел бы установить заголовок запроса (точнее, HTTP_HOST) из Web.config с помощью модуля перезаписи URL-адресов IIS на веб-сайтах Azure. В основном я хотел бы иметь что-то подобное в Web.config моего сайта:

<system.webServer>
  <rules>
    <clear />
    <rule name="My rule" enabled="true">
      <match url=".*" />
      <serverVariables>
        <set name="HTTP_HOST" value="my value" />
      </serverVariables>
      <action type="None" />
    </rule>

Это приводит к ошибке, что HTTP_HOST не может быть установлен. Это нормально, и со стандартным IIS следующим шагом будет добавление HTTP_HOST к элементу <allowedServerVariables> в applicationhost.config напрямую или через AppCmd. Однако я не смог найти никаких намеков на то, как каким-то образом получить доступ к этой конфигурации.

Можно ли как-то изменить конфигурацию apphost или как-то еще добавить разрешенные серверные переменные?


person Piedone    schedule 09.02.2014    source источник


Ответы (3)


Этот ответ устарел (и его следует удалить).

person Mark Rendle    schedule 10.02.2014
comment
Спасибо! В итоге я заменил заголовок из модуля HTTP. - person Piedone; 11.02.2014

ApplicationHost.config Azure можно изменить, применив преобразования xdt.

Загрузите файл на /site и перезапустите сайт, чтобы изменения вступили в силу:

ApplicationHost.xdt

<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
    <system.webServer>
      <rewrite>
        <allowedServerVariables>
          <add name="HTTP_HOST" xdt:Transform="Insert" />
        </allowedServerVariables>
      </rewrite>
    </system.webServer>
</configuration>

Смотрите также:

  1. https://github.com/projectkudu/kudu/wiki/Xdt-transform-samples
  2. http://azure.microsoft.com/nl-nl/documentation/articles/web-sites-transform-extend/
person Joris Talma    schedule 17.10.2014
comment
Спасибо. Я думаю, что это пришло с расширениями сайта. - person Piedone; 18.10.2014
comment
Возможно, стоит быть осторожным при использовании xdt:Transform="Insert", потому что это может привести к полному повреждению экземпляра вашего веб-приложения, поскольку оно будет пытаться добавить повторяющуюся запись в ваш applicationgHost.config каждый раз, когда он оценивается. Вероятно, безопаснее использовать вместо него xdt:Transform="InsertIfMissing". - person Frank Fu; 15.11.2018
comment
Вам также необходимо указать xdt:Locator="Match(name)", иначе XDT будет соответствовать только имени элемента <add>, что совершенно бесполезно! - person Dai; 02.08.2020

Расширяя ответ Йориса, вы должны использовать xdt:Transform="InsertIfMissing" и xdt:Locator="Match(name)", иначе он не будет работать так, как вы ожидаете (вот пример того, как он не работает как- ожидается, и еще один пример).

Итак, ваш applicationHost.xdt должен выглядеть так:

<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
    <system.webServer>
      <rewrite>
        <allowedServerVariables>
          <add name="HTTP_HOST" xdt:Transform="InsertIfMissing" xdt:Locator="Match(name)" />
        </allowedServerVariables>
      </rewrite>
    </system.webServer>
</configuration>
person Dai    schedule 02.08.2020
comment
Это xdt:Locator=Match(name) сработало для меня... Спасибо! - person Sarthak Gupta; 24.11.2020