Web.config URL重写 - HTTPS和非WWW

时间:2016-09-15 13:08:11

标签: asp.net regex iis url-rewriting

我需要重写httpsnon-www,同时非HARDCODING域,因为我们有很多服务器。这需要位于web.config,而不是IIS

我读过很多文章:

https重写有效,non-www没有。

    <rule name="Redirect to HTTPS" stopProcessing="true">
      <match url="(.*)" />
      <conditions>
        <add input="{HTTPS}" pattern="^OFF$" />
      </conditions>
      <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="Permanent" />
    </rule>
    <rule name="Remove WWW" patternSyntax="Wildcard" stopProcessing="true">
      <match url="*" />
      <conditions>
        <!--<add input="{CACHE_URL}" pattern="*://www.*" />-->
        <!--<add input="{HTTP_HOST}" pattern="*://www.*" />-->
        <add input="{HTTP_HOST}" pattern="^.*www.*" />
      </conditions>
      <action type="Redirect" url="https://{SERVER_NAME}/{R:1}" redirectType="Permanent" />
      // i've also tried
      // url="{C:2}/{R:1}"
      // url="{C:1}/{C:2}"
    </rule>

我在正则表达式测试器上测试了^.*www.*的正则表达式,它匹配www.testing.com但不匹配testing.com - 所以我认为该模式会捕获它。

我需要重定向的网址:

2 个答案:

答案 0 :(得分:2)

是我自己的问题 - www没有DNS,因此重定向无法自行解决。

使用的代码:

    <rule name="Redirect to HTTPS" stopProcessing="true">
      <match url="(.*)"/>
      <conditions>
        <add input="{HTTPS}" pattern="^OFF$"/>
      </conditions>
      <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="Permanent"/>
    </rule>
    <rule name="Remove WWW" patternSyntax="Wildcard" stopProcessing="true">
      <match url="*" />
      <conditions>
        <add input="{CACHE_URL}" pattern="*://www.*" />
      </conditions>
      <action type="Redirect" url="{C:1}://{C:2}" redirectType="Permanent" />
    </rule>

答案 1 :(得分:0)

添加“规范域名”规则。 IIS 10

Rob发现的解决方案也很好。我的似乎更容易恕我直言。