使用IIS URL Rewrite从地址中删除www的正确方法

时间:2011-09-10 00:03:30

标签: iis-7 iis-7.5 url-rewriting

使用IIS URL重写从网址中删除www子域的最佳方法是什么?

4 个答案:

答案 0 :(得分:35)

如果您希望它与任何主机名一起使用(不将其硬编码到规则中),您需要执行以下操作:

<rule name="Remove www" stopProcessing="true">
  <match url="(.*)" ignoreCase="true" />
  <conditions logicalGrouping="MatchAll">
    <add input="{HTTP_HOST}" pattern="^www\.(.+)$" />
  </conditions>
  <action type="Redirect" url="http://{C:1}/{R:0}" appendQueryString="true" redirectType="Permanent" />
</rule>

在重定向操作中,{C:1}包含条件中的第二个捕获组,而{R:0}包含规则中的任何内容(路径)。 appendQueryString =“true”还会将任何查询字符串附加到重定向(如果存在)。但请记住,任何url哈希值(如果存在)都将在此过程中丢失,因为它们不会传递给服务器。

答案 1 :(得分:5)

以下一项应该有效:

<system.webServer>
  <rewrite>
    <rules>
      <rule name="Remove WWW" stopProcessing="true">
        <match url="^(.*)$" />
        <conditions>
          <add input="{HTTP_HOST}" pattern="^(www\.)(.*)$" />
        </conditions>
        <action type="Redirect" url="http://www.example.com{PATH_INFO}" redirectType="Permanent" />
      </rule>
    </rules>
  </rewrite>
</system.webServer>

答案 2 :(得分:5)

IIS会自动为您完成:

选择网站&gt;网址重写&gt;新规则&gt;规范主机名:)

答案 3 :(得分:-1)

要执行适用于http和https的重定向,可以使用以下内容

    <rewrite>
        <rules>
            <rule name="Lose the www" enabled="true" stopProcessing="true">
                <match url="(.*)" ignoreCase="true"/>
                <conditions logicalGrouping="MatchAll">
                    <add input="{HTTP_HOST}" pattern="^www\.(.*)$"/>                    
                </conditions>
                <action type="Redirect" redirectType="Permanent" url="{SchemeMap:{HTTPS}}://{C:1}/{R:1}" appendQueryString="true" />
            </rule>
        </rules>
        <rewriteMaps>
            <rewriteMap name="SchemeMap">
                <add key="on" value="https" />
                <add key="off" value="http" />
            </rewriteMap>
        </rewriteMaps>
    </rewrite>