几个月前我还在使用 IIS 6,我可以向物理上位于同一目录的每个网站添加不同的默认文档。自从 II7 向 Web 配置添加了默认文档值以来,我无法使用这种技术,因为所有目录的 web.config 都已更改。
因此,我找到了一个简单的解决方案,使用重写模块来更改每个域的默认文档
<defaultDocument enabled="false" />
<rewrite>
<rewriteMaps>
<rewriteMap name="ResolveDefaultDocForHost">
<add key="site1.com" value="Default1.aspx" />
<add key="site2.com" value="Default2.aspx" />
</rewriteMap>
</rewriteMaps>
<rules>
<rule name="DefaultDoc Redirect If No Trailing Slash" stopProcessing="true">
<match url=".*[^/]$" />
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" />
</conditions>
<action type="Redirect" url="{R:0}/" />
</rule>
<rule name="PerHostDefaultDocSlash" stopProcessing="true">
<match url="$|.*/$" />
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" />
<add input="{ResolveDefaultDocForHost:{HTTP_HOST}}" pattern="(.+)" />
</conditions>
<action type="Rewrite" url="{R:0}{C:1}" appendQueryString="true" />
</rule>
</rules>
</rewrite>
现在我还有另外两个问题。
首先,我不能使用规范的 URL 重写,如果我设置了一个,那么 site1.com 和 site2.com 会重定向到 www.site1.com,而不是每个都有 www。第二个问题是,site1' 和 site2' 物理目录中有一个名为成员的目录,其中 Default.aspx 始终是默认文档,无论使用哪个域名。它也不能正常工作。
请帮助我解决这个问题,因为我从来没有想过我会遇到这样的问题,本来应该是更好的 IIS7......
答案1
您有两个选择。一个是继续沿着您现在的路径前进。从高层次来看,规范 URL 重写问题在于操作。您可以使用 {HTTP_HOST},因此操作应该是类似 www.{HTTP_HOST}/{URL} 的内容。这使得它根据输入的域名动态变化,而不是将其设置为特定名称。
但是,您可能会发现继续使用默认文档更容易。每个站点执行此操作的方法是使用 applicationHost.config 中的位置标记。您无法在 IIS 管理器中以标准方式执行此操作,因为正如您所指出的,它对所有站点共享相同的配置。有 3 种相当简单的方法可以做到这一点(不计算编程选项)。一种是使用配置编辑器,另一种是使用 appcmd,第三种是直接使用记事本或编辑器。
我将在这里描述如何通过配置管理器进行操作。首先,请确保您已安装它:http://www.iis.net/download/AdministrationPack
然后使用 IIS 管理器,导航到要更改默认文档的站点。打开配置管理器。在左上角的下拉菜单中,更改为 system.webServer/defaultDocument。在右上角,确保更改为 ApplicationHost.config 选项。在主窗口中,选择“文件”行并单击 (...)。其余的很简单。