PHP (или что-то еще) CGI-конфигурация в web.config IIS

Недавно я разработал установщик для веб-приложения (да, веб-приложение с установщиком) с помощью набора инструментов Wix .

Мастер направляет пользователя на получение всей базовой информации, необходимой сайту для установки, и выглядит следующим образом:

введите описание изображения здесь

Используя пользовательские действия в конце установки, я динамически настроил IIS на обработчик CGI с помощью документации , чтобы настроить FastCGI на Host PHP, Python, Applications . Для достижения этих результатов есть много шагов и развития, но проблема здесь:

Я установил приложение, и все работает нормально, но, если я удалю или установлю другой экземпляр или другой WebApplication, обработчики, настроенные IIS, похожи на глобальные и всегда указывают на первую установленную. (Проблема возникает при удалении приложения). ApplicationHost.config, расположенный в C: \ Windows \ System32 \ inetsrv \ config, который является конфигурацией IIS, имеет «конфигурацию», подобную глобальной.

<handlers accessPolicy="Read, Script"> <add name="PHP-FastCGI" path="*.php" verb="*" modules="FastCgiModule" scriptProcessor="E:\CIM_dev\bin\php-v5.6\php-cgi.exe" resourceType="Either" /> <add name="CGI-exe_2" path="*.exe" verb="*" modules="CgiModule" resourceType="File" requireAccess="Execute" allowPathInfo="true" /> <add name="TRACEVerbHandler2" path="*" verb="TRACE" modules="ProtocolSupportModule" requireAccess="None" /> <add name="OPTIONSVerbHandler2" path="*" verb="OPTIONS" modules="ProtocolSupportModule" requireAccess="None" /> <add name="StaticFile2" path="*" verb="*" modules="StaticFileModule,DefaultDocumentModule,DirectoryListingModule" resourceType="Either" requireAccess="Read" /> </handlers> 

Мой вопрос в том, есть ли способ сделать эту конфигурацию для каждого веб-сайта в web.config ? Я пробовал все без успеха.

Поэтому, если я правильно понимаю, вы хотите переместить обработчиков php с уровня сервера / веб-сайта в отдельные приложения. Почему вы не добавляете файл web.config в свою папку приложения php и не перемещаете в нем обработчики конкретных приложений.

  1. https://stackoverflow.com/a/35332431/1766402 – проверьте этот ответ (надеюсь, у вас включен CGI в IIS?). Чтобы сделать это через wix, вы можете добавить следующую команду в пользовательское действие и выполнить. Это разблокирует родительский файл конфигурации.

% windir% \ system32 \ inetsrv \ appcmd.exe разблокировать конфигурацию "SiteName / app1" -section: system.webServer / обработчики

  1. В папке приложения PHP (скажем, c: \ php \ app1) создайте файл web.config со следующим содержимым:
 <?xml version="1.0"?> <configuration> <system.webServer> <handlers> <add name="PHPviaFastCGI" path="*.php" verb="*" modules="FastCgiModule" scriptProcessor="C:\Users\axputhe\Documents\PHP\php-cgi.exe" resourceType="Unspecified" /> </handlers> </system.webServer> </configuration> 
  1. Теперь, если вы посмотрите на свое приложение в диспетчере IIS, вы увидите что-то вроде этого (App Dir -> Handler Mappings)

введите описание изображения здесь

Примечание «local» это подтверждает, что параметр исходит из вашего локального web.config, а не из файла applicationhost.config.