IIS 7 规范 URL 重定向
Posted
技术标签:
【中文标题】IIS 7 规范 URL 重定向【英文标题】:IIS 7 Canonical URL redirect 【发布时间】:2011-08-16 23:01:50 【问题描述】:我想让一个网站的地址总是有 www,并通过 IIS 重写来强制它。
例如,test.com 将变为 www.test.com。
典型的示例重写规则是:
<rule name="Canonical Host Name" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="HTTP_HOST" negate="true" pattern="^www\.test\.com$" />
</conditions>
<action type="Redirect" url="http://www.test.com/R:1" redirectType="Permanent" />
</rule>
但是,这需要我输入我网站的完整网址。它不适用于具有 www.test.dev 和 www.test.stage 等 URL 的开发和登台环境。
是否可以创建一个 IIS 重写规则来处理所有这些情况?
【问题讨论】:
如果您使用的是 Visual Studio,配置转换将有助于解决测试/部署问题。 【参考方案1】:我还建议您在本地环境中测试另一种变体:
-
添加到 c:\Windows\System32\drivers\etc\hosts:
127.0.0.1 www.example.com
在 IIS 管理器中选择站点并右键单击 -> 编辑绑定.. -> 添加..
输入主机名:www.example.com
打开cmd运行iisreset
现在您可以在映射到本地主机的浏览器中使用 www.example.com
【讨论】:
【参考方案2】:我有另一个解决方案:
<rule name="Canonical domain name" enabled="true" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="HTTP_HOST" negate="true" pattern="^www\.([.a-zA-Z0-9]+)$" />
</conditions>
<action type="Redirect" url="http://www.HTTP_HOST/R:0" appendQueryString="true" redirectType="Permanent" />
</rule>
【讨论】:
我试过这个规则,但它不适用于 IP 地址 url。问题是 negate="true" 类型规则会捕获以http://www.
为前缀的IP地址【参考方案3】:
你说得对,完整的 URL 需要在 web.config 中。不过你有选择。
您可以使用配置转换使正则表达式匹配正确的环境。
如果您在 web.config 中包含所有三个 URL 重写规则,似乎没有任何危害。听起来您的环境是孤立的,因此每个环境只会匹配其中一个规则。这可能会使您的 web.config 变得混乱,但不会很糟糕。
我会选择选项 1。您可以在此处找到有关配置转换的信息:http://msdn.microsoft.com/en-us/library/dd465326.aspx
【讨论】:
以上是关于IIS 7 规范 URL 重定向的主要内容,如果未能解决你的问题,请参考以下文章