IIS URL重写模块仅限没有子域

时间:2015-08-04 20:58:13

标签: regex iis url-rewriting url-rewrite-module

我在Windows 2012服务器上使用IIS URL重写模块。我只想添加一个规范的www规则,如果缺少子域(或者' example.com'上的完全匹配)。

问题是现成的Canonical重写规则IIS创建了将所有子域的所有流量(*)重写为www。

 <rule name="CanonicalHostNameRule1">
 <match url="(.*)" />
   <conditions>
      <add input="{HTTP_HOST}" pattern="^www\.example\.com$" negate="true" />
   </conditions>
   <action type="Redirect" url="http://www.example.com/{R:1}" />
 </rule>

问题是我在一个站点下有多个子域/应用程序(因此有一个web.config)。

我想要

  

example.com

转到

  

www.example.com

但要留下这些和任何其他子域名:

  

secure.example.com

     

profile.example.com

我是否需要更具体的匹配正则表达式或模式?

更具体地说,安全子域使用https和更好的加密证书。

2 个答案:

答案 0 :(得分:0)

这个正则表达式更好:

^(w{3}\.)?\w+\.com/

这个正则表达式将为您提供获取和不使用www的URL的选项。和/在最后,但仍然不会数学子域。

答案 1 :(得分:0)

您正在寻找不是 www.example.com所有。这包括所有其他子域。

让我们来看看你的情况:

 <add input="{HTTP_HOST}" pattern="^www\.example\.com$" negate="true" />
  • 如果www.example.com进来 - &gt; match = true - &gt;否定 - &gt; false - &gt;没有任何改变(如你所愿)

  • 如果example.com进来 - &gt; match = false - &gt;否定 - &gt;是的 - &gt; URL被重定向(如您所愿)

  • 如果foo.example.com进来 - &gt; match = false - &gt;否定 - &gt;是的 - &gt; URL被重定向(您不想要)

要解决此问题,请尝试以下配置:

<rule name="Redirect to www" stopProcessing="true">
    <match url="(.*)" />
    <conditions trackAllCaptures="true">
       <add input="{CACHE_URL}" pattern="^(.+)://" />
       <add input="{HTTP_HOST}" pattern="^example\.com$" />
    </conditions>
    <action type="Redirect" url="{C:1}://www.example.com/{R:1}" />
</rule>

C:1部分适用于协议(httphttps)。

找到here