我已将 IIS 7 设置好,其“默认网站”完整地设置在端口 80,并且在“网站”下添加了一些与其并行的其他网站,所有网站都在不同的端口上运行。
我想将这些网站移动为默认网站的子应用程序(即:所有网站都在端口 80 上运行,可以通过 ../SiteA ../SiteB 访问),同时保持其当前配置。
当前站点设置:
站点
- 默认网站
- 站点A
- 站点B
- 网站C
想要的网站设置:
站点
- 默认网站
- 站点A
- 站点B
- 网站C
我可以删除它们并重新创建它们,但我想保留它们的配置。
编辑:当前设置 -
需要澄清的是 - 我有在 IIS 中创建的现有站点,并在 IIS 中配置了这些站点 - 我不想删除它们,然后通过将它们作为子应用程序从头添加到默认网站来重新创建它们。我想知道是否有办法将现有应用程序及其配置一起移动(这意味着如果可以避免,我不想重新创建 Mime 类型、身份验证规则、绑定和其他自定义设置)。
更具体地说,我原本以为我可以单击并将此处的其中一个站点拖到“默认网站”上,从而有效地将其重新定位为子应用程序。
如果这不是支持的功能,那也没关系,我只是想探索支持这种事情的可能性。
答案1
对于要作为子应用程序的每个站点,请右键单击Default Website
并选择Add Application
:
然后将应用程序指向该站点的现有物理文件夹:
现在,根据您如何保护SiteA
、SiteB
和的物理文件夹SiteC
,您可能需要调整 NTFS 权限以允许将托管这些站点的应用程序池的应用程序池标识。
您可以重新使用已经存在的池SiteA
,SiteB
然后SiteC
单击Select
应用程序池灰色的文本框。
关于您对该问题的更新:
我曾以为我可以单击并将此处的其中一个站点拖到“默认网站”上,从而有效地将其重新定位为子应用程序。
不幸的是,IIS MMC 没有该功能,您需要手动完成该操作,并且可以通过在 IIS7 文件中仔细复制、粘贴和调整设置来完成applicationHost.config
。
在哪里查找你的站点配置
如果大多数设置都是通过 IIS MMC UI 使用 Mime、默认文档、错误页面等功能配置的,那么这些设置将保留在web.config
下的站点文件中<system.webServer>
。如果是这种情况,那么您不需要做太多事情。
但是,如果使用命令行工具或 IIS MMC 配置编辑器功能配置了设置appcmd.exe
,并且提交位置设置为/commit:apphost
(或者ApplicationHost.config <location path="SiteX" />
使用配置编辑器),则这些设置将直接保留在 IIS7 的主配置文件中,该文件位于:
%systemroot%\system32\inetsrv\config\applicationHost.config
为了了解配置文件的结构,applicationHost.config
我建议阅读以下内容:
单击右侧面板中的“按模式查看”,将显示设置的层次结构。
站点在集合中定义,<sites>
正如您可能猜到的那样,该集合包含一组<site>
元素。有一些设置是<site>
元素的子元素,它们放在其他任何地方都没有意义,例如<bindings>
指定站点 IP 地址、主机头、要监听的端口等的集合。
关于功能委托
通过 MMC UI 配置站点功能时,设置的持久化方式(无论是保存在本地站点web.config
文件中还是存储在applicationHost.config
文件中)通常由该设置的功能委派的配置方式控制。
您可以在 IIS7 的 MMC 服务器范围配置节点的管理部分下找到功能委派配置工具:
启动它时,您将看到服务器的(几乎)所有可配置功能的列表:
简而言之,任何设置为Read Only
的配置设置都将被锁定,并且只能在applicationHost.config
文件中配置/保存。
Read/Write
任何被委托为或Configuration Read/Write
将保存在站点或子应用程序的文件中的功能web.config
。
上述注意事项是,如果您使用站点级配置编辑器更改任何已委派的设置(Read/Write
),即:
...并且您指定了该设置,则无论该功能的委派设置如何,ApplicationHost.config <location path="SiteA" />
都将在文件中重新配置该设置。applicationHost.config
希望这能解释你可以期待寻找根据对功能委派规则的解释来确定您的设置。
复制非委派功能设置
可以按站点或应用程序控制的非委托功能设置存储在文件<location>
中的配置元素中applicationHost.config
。这些元素的行为与 ASP.NET 中的元素非常相似<location>
。以下是使用经典 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>
您可能需要跳到文件末尾来找到它。
现在,如果您想将此设置复制到位于另一个站点下的新应用程序,即Default Website/SiteA
复制并粘贴上述设置,然后更改路径以匹配精确的层次结构:
<location path="Default Website/SiteA">
<system.webServer>
<asp scriptErrorSentToBrowser="true" />
</system.webServer>
</location>
这样做应该适用于 99% 的情况,并且如果不知道您的确切配置,就很难推测需要特别注意的 1%。
脚注
使用该applicationHost.config
文件时,每次更改之前最好先复制一份。每次只做一件事,这样万一您不小心彻底破坏了 IIS,就可以回滚 :)
如果你在 64 位环境中工作,那么你需要使用类似记事本2其中有一个64 位版本才能编辑和保存applicationHost.config
文件。执行这些操作时,您还需要“以管理员身份运行”。