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 重定向的主要内容,如果未能解决你的问题,请参考以下文章

站点核心 301 重定向 iis 7

IIS 7 上的条件 https 重定向

使用iis 7重写/重定向去除前导零的数字并转发

减少链接 URL 重定向 [IIS/Regex/ReWrite]

IIS7 301 从 URL 列表重定向

iis里URL重写重定向,http做301重定向https