我的网站有两个绑定:1000 和 1443(同一 IIS 实例上的另一个网站正在使用端口 80/443)。端口 1000 是 HTTP,端口 1443 是 HTTPS。我想要做的是使用“htt p://server:1000”将所有传入请求重定向到"https://server:1443"
。我正在尝试使用 IIS 7 重写模块 2.0,但我遇到了麻烦。任何见解都值得赞赏!
顺便说一句,下面的重写配置对于在端口 80 上有 HTTP 绑定而在端口 443 上有 HTTPS 绑定的站点非常有效,但它不适用于我的端口。
PS 我的 URL 故意带有空格,因为“垃圾邮件预防机制”已启动。由于某种原因,google 登录不再起作用,所以我不得不创建一个 OpenID 帐户(No Script 可能是罪魁祸首)。我不确定如何让 XML 很好地显示,所以我在左括号后添加了空格。
< ?xml version="1.0" encoding="utf-8"?>
< configuration>
< system.webServer>
< rewrite>
< rules>
< rule name="HTTP to HTTPS redirect" stopProcessing="true">
< match url="(.*)" />
< conditions trackAllCaptures="true">
< add input="{HTTPS}" pattern="off" />
< /conditions>
< action type="Redirect" redirectType="Found" url="htt ps: // {HTTP_HOST}/{R:1}" />
< /rule>
< /rules>
< /rewrite>
< /system.webServer>
< /configuration>
答案1
尽管这个问题之前已经得到解答,但这是我使用的规则。
<rule name="Redirect to HTTP on different port" enabled="true" stopProcessing="true">
<match url="(.*)"/>
<conditions>
<add input="{HTTPS}" pattern="ON"/>
</conditions>
<!-- Cannot Use {HTTP_HOST} as it contains both the {SERVER_NAME}{SERVER_PORT} -->
<action type="Redirect" url="http://{SERVER_NAME}:1000{HTTP_URL}" redirectType="Found" appendQueryString="false"/>
</rule>
答案2
<rule name="HTTP to HTTPS on different SSL Port" enabled="true" stopProcessing="true">
<match url="(.*)" ignoreCase="true" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="true">
<add input="{HTTPS}" pattern="off" />
<add input="{HTTP_HOST}" pattern="([^/:]*?):[^/]*?" />
</conditions>
<action type="Redirect" url="https://{C:1}:1443/{R:0}" appendQueryString="false" />
</rule>
这解决了我的问题。
答案3
尝试改变这个:
<action type="Redirect" redirectType="Found" url="https://{HTTP_HOST}/{R:1}"/>
更改为:
<action type="Redirect" redirectType="Found" url="https://{HTTP_HOST}:1443/{R:1}"/>