我有一个标准网站托管在我完全控制的服务器上 - www.domain.com。我最近为这个域名购买了 SSL 证书,准备接受信用卡,并希望所有请求都重定向到https://www.domain.com在大多数情况下,我创建的规则(见下文)运行良好 - 如果我输入http://www.domain.com它将重定向到https://www.domain.com。我遇到的问题是,如果我转到内部链接,例如http://www.domain.com/folder/page.aspx,我得到 404,因为唯一的绑定与 HTTPS 绑定。我如何制定重定向规则,规定对 www.domain.com 的任何请求都会发送到 HTTPS,但保留请求的原始文件夹/页面结构?那么,http://www.domain.com/folder/page.aspx送我到https://www.domain.com/folder/page.aspx。我希望查询字符串值也保持完整。
这是我当前的重写规则:
<rewrite>
<rules>
<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}" />
</rule>
</rules>
</rewrite>
答案1
我最终自己解决了这个问题——我结合了两种不同的规则(一种是重写http://域名.com到https://www.domain.com证书链接到的位置)以及另一个重定向所有 HTTPS 请求,这似乎运行正常。以下是相关的配置条目:
<rewrite>
<rules>
<rule name="CanonicalHostNameRule1">
<match url="(.*)" />
<conditions>
<add input="{HTTP_HOST}" pattern="^www\.domain\.com$" negate="true" />
</conditions>
<action type="Redirect" url="http://www.domain.com/{R:1}" />
</rule>
<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}" />
</rule>
</rules>
</rewrite>
答案2
我知道如果你在 IIS 中配置重定向,你可以带走整个 URL,如果你使用属性appendUrlTrail="true"。也许你可以将其附加到标签。我不确定它是否有效 :-)