将 IIS 7 应用程序移动到默认网站而不删除和重新创建它

Jef*_*ley 3 iis iis-7

我在 IIS 7 的 80 端口设置了完整的“默认网站”,并且在“站点”下添加了一些与其平行的其他网站,它们都在不同的端口上运行。

我想将这些站点作为默认网站的子应用程序存在(即:所有站点都在端口 80 上运行,可作为 ../SiteA ../SiteB 访问),同时保持其当前配置。

当前站点设置:

网站

  • 默认网站
  • 站点A
  • 站点B
  • 站点C

想要的网站设置:

网站

  • 默认网站
    • 站点A
    • 站点B
    • 站点C

我可以删除它们并重新创建它们,但我想维护它们的配置。

编辑:当前设置 -

当前的 IIS 7 设置

澄清一下 - 我在 IIS 中创建了现有站点,在 IIS 中配置 - 我不想删除它们并通过从头开始将它们作为子应用程序添加到默认网站来重新创建它们。我想知道是否有办法从字面上移动现有应用程序及其配置(这意味着我有 Mime 类型、身份验证规则、绑定和其他自定义设置,如果可以避免的话,我不想重新创建) .

更具体地说,我曾想我可以单击此处的一个站点并将其拖到“默认网站”上,从而有效地将其重新定位为子应用程序。

如果这不是受支持的功能,那很好,我只是想探索支持这种事情的可能性。

Kev*_*Kev 7

对于您想要作为子应用程序的每个站点,右键单击Default Website并选择Add Application

在此处输入图片说明

然后将应用程序指向站点的现有物理文件夹:

在此处输入图片说明

现在,根据您保护SiteASiteB和的物理文件夹的方式,SiteC您可能需要调整 NTFS 权限以允许应用程序池标识用于托管这些站点的任何应用程序池。

您可以重新使用已经存在的池SiteASiteB然后SiteC单击Select应用程序池”旁边的灰色文本框。

关于您对问题的更新:

我原以为我可以点击这里的一个站点并将其拖到“默认网站”上,从而有效地将其重新定位为子应用程序。

不幸的是,IIS MMC 没有这种功能,这是您需要手动完成的,并且可以通过仔细复制、粘贴和调整 IIS7applicationHost.config文件中的设置来完成。

在哪里可以找到您的站点配置

如果大部分的设置是通过IIS MMC UI使用MIME配置,默认文档,错误页面等功能,然后这些设置会在您的网站上持续存在web.config的文件下<system.webServer>。如果是这种情况,那么您不需要做太多事情。

但是,如果设置是使用appcmd.exe命令行工具或使用 IIS MMC 配置编辑器功能配置的,并且提交位置设置为/commit:apphost(或者ApplicationHost.config <location path="SiteX" />如果使用配置编辑器),那么这些设置将直接保存在驻留在 IIS7 的主配置文件中:

%systemroot%\system32\inetsrv\config\applicationHost.config

要了解applicationHost.config配置文件的结构,我建议您阅读以下内容:

<system.applicationHost> - MS IIS.NET 站点

单击右侧面板中的“按架构查看”,这将显示设置的层次结构。

<sites>集合中定义了一个站点,其中包含您可能猜到的<site>元素集合。有一些设置是<site>元素的子元素,它们驻留在其他任何地方都没有意义,例如<bindings>指定站点 IP 地址、主机头、侦听端口等的集合。

关于功能委托

通过 MMC UI 配置站点功能时,设置的持久化方式(是保存在本地站点web.config文件中还是存储在applicationHost.config文件中通常由配置该设置的功能委派的方式控制。

您可以在 IIS7 的 MMC 服务器范围配置节点的管理部分下找到功能委托配置工具:

在此处输入图片说明

当您启动它时,您将看到(几乎)所有服务器可配置功能的列表:

在此处输入图片说明

简而言之,任何设置为Read Only将锁定其配置设置,并且只能在applicationHost.config文件中配置/保存。

任何被委派为Read/WriteConfiguration Read/Write将保存在站点或子应用程序web.config文件中的功能。

上面的警告是,如果您使用站点级别的配置编辑器来更改任何委托 ( Read/Write) 的设置,即:

在此处输入图片说明

在此处输入图片说明

...并且您指定ApplicationHost.config <location path="SiteA" />了该设置将在applicationHost.config文件中重新配置,而不管该功能的委派设置如何。

这有望解释您可以根据对功能委托规则的解释在何处找到您的设置。

复制非委派功能设置

可以在每个站点或应用程序基础上控制的非委托功能设置存储在文件的<location>配置元素中applicationHost.config。这些行为很像<location>ASP.NET 中的元素。这是一个使用经典 ASP 设置的有效示例。

默认情况下不委派经典 ASP 设置(委派设置Read Only在功能委派工具中设置为。

SiteA 已将其Classic ASP Debugging Properties -> Send Errors To Browser设置更改为True(默认为False):

在此处输入图片说明

应用此设置后,它会存储在applicationHost.config文件中,如下所示:

<location path="SiteA">
  <system.webServer>
    <asp scriptErrorSentToBrowser="true" />
  </system.webServer>
</location>
Run Code Online (Sandbox Code Playgroud)

您可能需要跳到文件末尾才能找到它。

现在,如果您想将此设置复制到驻留在另一个站点下的新应用程序,即Default Website/SiteA复制并粘贴上述设置,只需更改路径以匹配确切的层次结构:

<location path="Default Website/SiteA">
  <system.webServer>
    <asp scriptErrorSentToBrowser="true" />
  </system.webServer>
</location>
Run Code Online (Sandbox Code Playgroud)

这样做应该适用于 99% 的情况,并且在不知道您的确切配置的情况下很难推测需要特别注意的 1%。

脚注

处理applicationHost.config文件时,最好在每次更改之前复制一份文件。一次只做一件事,这样你就可以在不小心完全破坏 IIS 时回滚:)

如果您在 64 位环境中工作,那么您需要使用Notepad2 之类的工具,它具有64 位版本才能编辑和保存applicationHost.config文件。执行这些操作时,您还需要“以管理员身份运行”。