web.config中的azure网站重写规则将.net重定向到.com

时间:2015-01-04 16:44:07

标签: regex iis azure-web-sites

我想确保所有.net流量都转到我的.com,所以我创建了这个规则,但我确信我这样做是错误的,因为它不起作用:

 <rule name=".net to .com" enabled="true" stopProcessing="true">
        <match url=".*mywebsite.net.*"/>
        <action type="Redirect" url="https://mywebsite.com/" appendQueryString="false" redirectType="Permanent"  />
      </rule>

我认为我正确编写了正则表达式,但正则表达式不是我的强项

1 个答案:

答案 0 :(得分:1)

你的正则表达式存在问题但是这通常不是如何设置规范域名规则(在这种情况下你想要的)。通常,您希望匹配进入服务器的每个 URL,然后过滤CGI环境变量的值(在本例中为HTTP_HOST)。你的重写规则看起来像这样:

<rule name="CanonicalHostNameRule1" stopProcessing="true">
    <match url="(.*)" />
    <conditions>
        <add input="{HTTP_HOST}" pattern="^mywebsite\.com$" negate="true" />
    </conditions>
    <action type="Redirect" url="https://mywebsite.com/{R:1}" appendQueryString="false" redirectType="Permanent" />
</rule>

这样做可以将来自非http://mywebsite.comhttps://mywebsite.com的网址的所有请求转发给https://mywebsite.com。匹配中会捕获实际网址,并将其放入参数{R:1} - 这样,如果您去说http://www.mywebsite.net/home.php,则会将其重定向到https://mywebsite.com/home.php

此外,如果要强制执行HTTPS,可以执行以下操作:

<rule name="CanonicalHostNameRule1" stopProcessing="true">
    <match url="(.*)" />
    <conditions logicalGrouping="MatchAny">
        <add input="{HTTPS}" pattern="^on$" negate="true" />
        <add input="{HTTP_HOST}" pattern="^mywebsite\.com$" negate="true" />
    </conditions>
    <action type="Redirect" url="https://mywebsite.com/{R:1}" appendQueryString="false" redirectType="Permanent" />
</rule>

第一个条件将检查cgi.HTTPS是否“开启”...如果不是,则重定向到HTTPS网址。

注意:如果您只想重定向mywebsite.net个网址,那么条件可能如下所示:

<add input="{HTTP_HOST}" pattern="mywebsite\.net$" />

希望这有帮助。