IIS web.config - един и същ файл за множество уебсайтове

Имаме IIS 7.5 (без използване на ASP) със следните сайтове:

  • Site A
  • Site B
  • Site C
  • Site D
  • Site E

Site B, Site C и Site D принадлежат към централизирано приложение, което използва същото web.config. Въпреки че IIS ни позволява да използваме web.confg за всички от тях плюс наследен web.config за всеки сайт, изглежда няма опция за групиране на сайтове, за да се ограничи това глобално наследяване.

За да илюстрирам проблема, ще извикам web.config след тяхното съдържание:

  • Site A използва web.config "company-website" в /www/static/site_A/web.config
  • Site B използва web.config "central-cms" в /www/cms/site_B/web.config
  • Site C използва web.config "central-cms" в /www/cms/site_C/web.config
  • Site D използва web.config "central-cms" в /www/cms/site_D/web.config
  • Site E използва web.config "community-board" в /www/boards/site_E/web.config

Както можете да видите, имаме 5 физически файла web.config, въпреки че 3 от тях (B, C, D) съдържат същото съдържание.

Искаме сайтове B, C и D да споделят един файл web.config, но все пак искаме сайтове A и E да използват свой собствен web.config без да се налага да отричаме наследяването.

Възможна структура:

  • /www/static/site_A/web.config (без наследство)
  • /www/cms/web.config (base inheritance)
    • /www/cms/site_B/web.config (+ inheritance)
    • /www/cms/site_C/web.config (+ наследство)
    • /www/cms/site_D/web.config (+ наследство)
  • /www/boards/site_E/web.config (без наследство)

Забележка: Всички файлове web.config декларират различни правила и директиви за пренаписване за <system.webServer>.

Способен ли е IIS 7.5 на това?


person Alex    schedule 14.10.2014    source източник


Отговори (1)


Web.config всъщност трябва да може да прави това. Поставете общия файл web.config в папка, за която всеки сайт има разрешение за четене. След това променете отделните файлове web.config, за да извикате общия файл:

<appSettings file="/path/to/some/common/web.config">

Тогава този общ файл може да се използва за всички файлове, които се нуждаят от него, и да се игнорира за тези, които не се нуждаят. Можете дори да го преименувате на common.config или нещо подобно, така че да не се наследява. Така че това ще работи:

<appSettings file="/www/common.config">

Всички дъщерни директории трябва да имат достъп за четене до него и тъй като това не е web.config, не трябва да се забърква с никакви настройки на приложението, които са извлечени.

Забележка: Когато включвате конфигурационен файл по този начин, промените във включения файл НЕ задействат рециклиране на приложението по същия начин, както би направила директна промяна в web.config. Това наистина не би трябвало да е проблем, тъй като просто трябва да рестартирате набора от приложения, но в началото може да е объркващо.

person Joel Etherton    schedule 14.10.2014
comment
Съжалявам, не изясних, че трябва да имаме достъп до system.webServer в web.config. По принцип имаме само пренаписвания в общата конфигурация. appSettings изглежда изобщо не се изпълнява в нашия случай. Забележка: Ние не използваме ASP. - person Alex; 14.10.2014