如何在IIS 7.0中为虚拟目录设置重定向网址?我已经安装了最新的url重写模块2.x。
我可以用一个例子解释我的问题:
我的IIS 7.0服务器上有一个网站,www.mysite.com。我决定在我的网站下创建一个指向网站根目录的虚拟目录“sales”。现在我需要为vdir创建一个重定向url。 vdir指向与我的站点根目录相同的虚拟根目录。
最大的想法是我可以访问www.mysite / sales,我会自动重定向到www.mysite.com?productid=200。
我尝试使用重写网址重定向vdir(不是网站),但我总是收到此错误消息:
Cannot add duplicate collection entry of type 'rule' with unique key
attribute 'name' set to "test".
当我指向虚拟vdir并尝试添加规则时会发生这种情况。
我可以在网站级别添加规则,但规则不起作用。我的意思是网址“www.mysite / sales”给了我以下错误。我知道钥匙是独一无二的。我从web.config检查了它。
这种功能在IIS 6.0中非常容易使用,只需使用鼠标指向vdir并设置属性 - >重定向到网址。
请有人解释在IIS 7.0中执行此操作的正确方法是什么?
答案 0 :(得分:28)
实际上并不那么容易,但也不是太可怕。
1)创建物理目录而不是虚拟目录。
2)确保您拥有HTTP重定向角色服务。见http://www.iis.net/ConfigReference/system.webServer/httpRedirect
3)打开IIS管理器并浏览到要重定向的物理目录。
4)双击IIS下的“HTTP重定向”图标。
5)选中“将请求重定向到此目的地”框并输入新网址(http://example.com/newPage.html)
6)根据需要检查接下来的两个方框;我发现通常需要检查两者。
7)按“应用”按钮。
8)选择网站并在管理网站下“重新启动”。
9)测试。
答案 1 :(得分:2)
发生这种情况的原因是,默认情况下,所有规则配置都从父Web应用程序继承。因此,如果在根网站内定义了规则,则它将在层次结构中的所有后续子网站上继承;除非它被清除。
因此,对于示例,如果IIS应用程序层次结构如下 -
默认网站(根)
<强> | Web应用程序1(VDir1)| Web子应用程序11(VDir2)
<强> | Web应用程序2(VDir3)
具有名称&#39;测试&#39;的规则如果存在于Root应用程序中,它将继承到Web Application 1,Web Application 11和Web Application 2
在您的情况下,Web应用程序11(VDir2)与(VDir1)在物理上位于相同的位置。因此,两个目录的IIS配置相同,因为它共享相同的Web.config文件。
因此,添加到Web.config文件的任何新规则将自动应用于这两个虚拟目录(VDir1和VDir2)。并且由于默认情况下规则会被继承,因此IIS中的规则引擎会在解析规则时发现它是一个问题,因为它已经通过继承存在。
可能的解决方案是添加&lt;清除/&gt;在web.config文件中添加任何规则之前标记,以便清除任何继承的规则。
<rewrite>
<rules>
<clear/>
<rule name="test" stopProcessing="true">
<match xxx />
<action xxx />
</rule>
</rules>
</rewrite>
但是,我更喜欢&lt;删除姓名=&#39;规则名称&#39; /&GT;标记而不是仅删除需要在继承的配置中添加的规则。这将确保根网站上的所有其他规则在层次结构中继承;只有这个新规则被(有点)覆盖。
<rewrite>
<rules>
<remove name="test"/>
<rule name="test" stopProcessing="true">
<match xxx />
<action xxx />
</rule>
</rules>
</rewrite>