我需要制定一条全局规则,将所有内容重写http://example.com/
为https://example.com/
。我托管多个域,但我的尝试要么不起作用,要么在所有域上都起作用。
我把这个放在我的applicationHost.config
:
<globalRules>
<rule name="Rewrite test" stopProcessing="true">
<match url="(.*)" />
<conditions logicalGrouping="MatchAll">
<add input="{HTTPS}" pattern="^OFF$" />
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" appendQueryString="true" />
</rule>
</globalRules>
<globalRules>
<rule name="kommunetv SSL">
<match url="(.*)" />
<conditions>
<add input="{HTTP_HOST}" pattern="http://(.*\.kommunetv.no)(/?.*)" />
</conditions>
<action type="Rewrite" url="https://{C:1}{C:2}" appendQueryString="false" />
</rule>
</globalRules>
尝试了各种匹配模式,也尝试了带{HTTP_HOST}
条件的匹配。希望得到一些意见 :)
答案1
<globalRules>
适用applicationHost.config
于整个服务器 - 所有域。
<conditions logicalGrouping="MatchAll"> <add input="{HTTPS}" pattern="^OFF$" /> </conditions> <action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" appendQueryString="true"/>
这仅检查{HTTPS}
,所以是的,这将重定向全部域。
<conditions> <add input="{HTTP_HOST}" pattern="http://(.*\.kommunetv.no)(/?.*)" /> </conditions> <action type="Rewrite" url="https://{C:1}{C:2}" appendQueryString="false" />
该HTTP_HOST
变量仅包含请求中的主机名(即 HTTP 标头的值Host
)。它不包含方案或 URL 路径。因此,上述条件永远不会匹配,规则也不会执行任何操作。如果匹配,则将创建一个重定向循环,因为您还需要检查状态HTTPS
。
您需要检查HTTPS
和HTTP_HOST
。例如:
<conditions logicalGrouping="MatchAll">
<add input="{HTTPS}" pattern="^off$" />
<add input="{HTTP_HOST}" pattern="^example\.com$" />
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" appendQueryString="true" />