如何在IIS7上使用重写模块处理默认文档?

直到几个月前,我一直在使用IIS 6,我可以添加不同的默认文档到每个网站是物理上相同的目录。 由于II7添加默认文档值到networkingconfiguration我不能使用这样的技术,所有的目录web.config被改变。

所以我发现简单的解决scheme与重写模块更改每个域的默认文档

<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.comredirect到www.site1.com而不是有www。 为每个。 第二个问题是在站点1和站点2的物理目录中有一个名为Default.aspx的成员,其中Default.aspx始终是一个默认文档,与使用哪个域名无关。 它不工作。

请帮我解决这个问题,因为我从来没有想过我会得到这样的问题,应该是更好的IIS7 …

你有两个select。 一个是要继续走下去。 在高层次上,规范的URL重写问题与动作有关。 您可以使用{HTTP_HOST},因此该操作应该像www。{HTTP_HOST} / {URL}。 这使得它基于input的域名进行dynamic更改,而不是将其设置为特定的名称。

但是,您可能会发现继续使用默认文档更容易。 每个站点执行此操作的方法是使用applicationHost.config中的位置标记。 您不能在IISpipe理器中使用标准方式,因为正如您所指出的那样,它将为所有站点共享相同的configuration。 有3个相当简单的方法来做到这一点(不包括编程选项)。 一个是configuration编辑器,另一个是appcmd,第三个是直接用记事本或编辑器。

我将在这里描述如何执行configurationpipe理器的方式。 首先,确保你已经安装了它: http : //www.iis.net/download/AdministrationPack

然后使用IISpipe理器,导航到您要更改默认文档的网站。 打开configurationpipe理器。 在左上angular的下拉列表中,切换到system.webServer / defaultDocument。 在右上angular,确保切换到ApplicationHost.config选项。 在主窗口中,select“文件”行并单击(…)。 其余的是直截了当的。