PHP(或其他)web.config IIS 中的 CGI 配置

PHP (or whatever) CGI configuration in web.config IIS

我最近使用 Wix Tool Set 为 Web 应用程序(是的,带有安装程序的 Web 应用程序)开发了一个安装程序。

向导引导用户获取站点安装所需的所有基本信息,如下所示:

在安装结束时使用自定义操作,我使用 the documentation 将 IIS 动态配置为处理程序 CGI,将 FastCGI 配置为主机 PHP、Python、应用程序。实现这个结果有很多步骤和开发,但是问题就在这里:

我安装了该应用程序并且一切正常,但是,如果我卸载或安装另一个实例或另一个 WebApplication,IIS 配置的处理程序就像全局一样,并且始终指向第一个安装的。 (当我卸载应用程序时出现问题) 位于C:\Windows\System32\inetsrv\configapplicationHost.config是IIS的配置,有"config"之类的global .

<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 处理程序从 server/website 级别移动到单个应用程序。为什么不在 php 应用程序文件夹中添加一个 web.config 文件并将应用程序特定的处理程序移到那里。

  1. - 检查这个答案(我希望你在 IIS 中启用了 CGI?)。要通过 wix 执行此操作,您能否在自定义操作中添加以下命令并执行。这将解锁父配置文件。

%windir%\system32\inetsrv\appcmd.exe unlock config "SiteName/app1" -section:system.webServer/handlers

  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 管理器中查看您的应用程序,您应该会看到类似这样的内容(应用程序目录 -> 处理程序映射)

注意 "local" 这确认设置来自您的本地 web.config 而不是来自 applicationhost.config 文件。