IIS 7 Canonical URL重定向

时间:2011-05-02 12:27:12

标签: iis url-rewriting rewrite iis-7.5

我想让一个网站在地址中始终有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重写规则?

3 个答案:

答案 0 :(得分:4)

我有另一种解决方案:

<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>

答案 1 :(得分:1)

您是正确的,完整的URL需要在web.config中。你有选择。

  1. 您可以使用配置转换使正则表达式与正确的环境匹配。

  2. 如果在web.config中包含所有三个URL重写规则,则似乎没有任何损害。听起来您的环境是孤立的,因此每个环境都只能匹配其中一个规则。这可能会使你的web.config混乱,但并不可怕。

  3. 我选择选项1.您可以在此处找到有关配置转换的信息:http://msdn.microsoft.com/en-us/library/dd465326.aspx

答案 2 :(得分:0)

我还建议您在本地环境中进行测试的另一种变体:

  1. 添加到c:\ Windows \ System32 \ drivers \ etc \ hosts:
  2. 127.0.0.1 www.example.com

    1. 在IIS管理器中选择站点并右键单击 - &gt;编辑绑定.. - &gt;添加..

    2. 输入主机名:www.example.com

    3. 打开cmd并运行iisreset

    4. 现在您可以在浏览器中使用www.example.com映射到localhost