我想确保所有.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>
我认为我正确编写了正则表达式,但正则表达式不是我的强项
答案 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.com
或https://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$" />
希望这有帮助。