IIS 7规范URL重定向

IIS 7规范URL重定向,iis,url-rewriting,rewrite,iis-7.5,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\.

我想让一个网站的地址中始终有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>

然而,这需要我输入我的网站的完整url。它不适用于具有URL(如www.test.dev和www.test.stage)的开发和登台环境


是否可以创建一个IIS重写规则来处理所有这些情况?

您是对的,完整的URL需要在web.config中。不过你有选择

  • 可以使用配置转换使正则表达式与正确的环境匹配

  • 如果您在web.config中包含所有三个URL重写规则,则似乎没有任何危害。听起来您的环境是隔离的,所以每个环境都只匹配其中一个规则。这可能会弄乱你的web.config,但并不可怕


  • 我会选择第一种。您可以在此处找到有关配置转换的信息:

    我有另一个解决方案供您使用:

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

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

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

  • 在IIS管理器中选择站点并右键单击->编辑绑定..->加上

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

  • 打开cmd并运行
    iisreset


  • 现在您可以在映射到本地主机的浏览器中使用www.example.com了

    我尝试了这个规则,但它不适用于IP地址URL。问题在于,negate=“true”类型规则捕获前缀为
    http://www.
    如果您使用的是visual studio,配置转换将有助于解决测试/部署问题。