如何使用 IIS7 上的重写模块操作默认文档?

如何使用 IIS7 上的重写模块操作默认文档?

几个月前我还在使用 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 选项。在主窗口中,选择“文件”行并单击 (...)。其余的很简单。

相关内容