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

我已经在80端口设置了“默认网站”的IIS 7,并且在“网站”下添加了一些与之并行的其他网站,所有这些网站都运行在不同的端口上。

我想移动这些网站作为默认网站的子应用程序(即:所有运行在端口80上,可到达../SiteA ../SiteB)存在,同时保持其当前configuration。

当前的网站设置:

网站

  • 默认网站
  • 站点A
  • 网站B
  • 思泰科

想要的网站设置:

网站

  • 默认网站
    • 站点A
    • 网站B
    • 思泰科

我可以删除它们并重新创build它们,但我想维护它们的configuration。

编辑:当前设置 –

当前的IIS 7安装程序

澄清 – 我已经在IIS中创build了现有的网站,在IIS中configuration – 我不想删除它们,并重新创build它们作为子应用程序从头开始添加到默认网站。 我想知道是否有一种方法可以将现有的应用程序及其configuration从字面上移动(意思是我有MIMEtypes,authentication规则,绑定和其他自定义设置,如果我可以避免的话,我不想重新创build它们) 。

更具体的说,我以为我可以在这里点击并拖动其中一个站点,把它作为一个子应用程序有效地重新定位到“默认网站”。

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

对于您想要作为子应用程序的每个站点,请右键单击Default Website然后selectAdd Application

在这里输入图像说明

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

在这里输入图像说明

现在,根据您如何保护SiteASiteBSiteC的物理文件夹,您可能需要调整NTFS权限,以允许应用程序池标识为任何应用程序池将承载这些站点。

您可以通过单击应用程序池灰显文本框旁边的Select来重新使用已存在的SiteASiteBSiteC

关于这个问题的更新:

我以为我可能能够点击并拖动这里的一个网站“默认网站”有效地将其重新定位为一个子应用程序。

不幸的是,IIS MMC没有这个function,这是你需要手动完成的,并且可以在IIS7的applicationHost.config文件中仔细复制,粘贴和调整设置。

哪里可以find您的网站configuration

如果大多数设置是通过使用Mime,默认文档,错误页面等function的IIS MMC UIconfiguration的,那么这些设置将会web.config<system.webServer>下的站点web.config文件中。 如果是这种情况,那么你不需要做太多的事情。

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

 %SYSTEMROOT%\ SYSTEM32 \ INETSRV \设置\的applicationHost.config

要理解applicationHost.configconfiguration文件的结构,我build议阅读以下内容:

<system.applicationHost> – MS IIS.NET网站

点击右侧面板中的“按模式查看”,将显示设置的层次结构。

网站是在<sites>集合中定义的,其中包含您可能会猜到的<site>元素的集合。 有几个设置是<site>元素的子元素,它们没有任何意义,例如指定了站点IP地址的<bindings>集合,主机头,要监听的端口等。

关于function委派

通过MMC UIconfiguration站点function时,设置的持续方式(无论是保存在本地站点web.config文件中还是存储在applicationHost.config文件中)通常由configuration该设置的function委派的方式来控制。

您可以在IIS7的MMC服务器范围configuration节点的pipe理部分下findfunction委派configuration工具:

在这里输入图像说明

当你启动这个function时,你会看到一个(几乎)所有服务器的可configurationfunction列表:

在这里输入图像说明

简而言之,任何设置为Read Only的configuration设置都将被locking,只能在applicationHost.config文件中进行configuration/保存。

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

需要注意的是,如果您使用站点级别的configuration编辑器更改任何委派的设置( Read/Write ),即:

在这里输入图像说明

在这里输入图像说明

…并且您指定了ApplicationHost.config <location path="SiteA" />那么无论该function的委派设置如何,该设置都将重新configuration在applicationHost.config文件中。

这有希望解释您可以根据解释function委派规则find您的设置。

复制未委派的function设置

可以在每个站点或应用程序基础上控制的未委派function设置存储在applicationHost.config文件的<location>configuration元素中。 这些行为非常像ASP.NET中的<location>元素。 这是一个使用经典ASP设置的工作示例。

默认情况下,传统的ASP设置不会被委派(委派设置在function委托工具中设置为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> 

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

现在如果你想复制这个设置到一个新的应用程序驻留在另一个网站,即Default Website/SiteA然后复制并粘贴上述设置,只是改变path以匹配确切的层次:

 <location path="Default Website/SiteA"> <system.webServer> <asp scriptErrorSentToBrowser="true" /> </system.webServer> </location> 

这样做应该适用于99%的情况,如果不知道确切的configuration,就很难推测需要特别关注的1%。

脚注

在使用applicationHost.config文件时,在进行每个更改之前先获取它的副本是个好主意。 一次做一件事,所以你可以回滚,如果你意外的完全摧毁IIS的话:)

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