iis-7 - IIS7 URL 重写 : How not to drop HTTPS protocol from rewritten URL?

标签 iis-7 url-rewriting

我正在一个网站上工作,该网站使用 IIS 7 的 URL 重写功能进行从 example.com 到 www.example.com 的永久重定向,以及从类似域名重写到“主”域名,例如从 www。 examples.com 到 www.example.com。

这个重写规则 - 如下所示 - 已经运行了一段时间了。但是,我们最近添加了 HTTPS 支持,并注意到如果用户访问要重写为 www.example.com 的 URL 之一,则 HTTPS 将被删除。例如,如果用户访问 https://example.com他们被重定向到 http://www.example.com ,而我们希望将它们发送至 https://www.example.com .

这是我们感兴趣的重写规则(在 Web.config 中):

<rule name="Canonical Host Name" stopProcessing="true">
    <match url="(.*)" />

    <conditions logicalGrouping="MatchAny">
        <add input="{HTTP_HOST}" pattern="^example\.com$" />
        <add input="{HTTP_HOST}" pattern="^(www\.)?example\.net$" />
        <add input="{HTTP_HOST}" pattern="^(www\.)?example\.info$" />
        <add input="{HTTP_HOST}" pattern="^(www\.)?examples\.com$" />
    </conditions>

    <action type="Redirect" url="http://www.example.com/{R:1}" redirectType="Permanent" />
</rule>

如您所见,action 元素的 url 属性直接指向 http://,所以我明白为什么 https://example.com重定向到 http://www.example.com .我的问题是,我该如何解决这个问题?我尝试(天真地)从 url 属性中删除 http://部分,但这没有用。

最佳答案

这是 Scott 对 Hasan 改进的回答。这应该涵盖混合 SSL/非 SSL 站点。该规则基本上是说“如果 url 没有 www.example.com”,则对其进行永久重定向。本质上...您正在将访问您的人重定向到没有 www 或直接访问您的 IP 地址。

<rewrite>
<rules>
    <rule name="Canonical Host Name" stopProcessing="true">
        <match url="(.*)" />
        <conditions logicalGrouping="MatchAll">
            <add input="{HTTP_HOST}" pattern="^www\.example\.com$" negate="true" />
        </conditions>
        <action type="Redirect" url="{MapSSL:{HTTPS}}www.example.com/{R:1}" redirectType="Permanent" />
    </rule>
</rules>
<rewriteMaps>
    <rewriteMap name="MapSSL" defaultValue="http://">
        <add key="ON" value="https://" />
        <add key="OFF" value="http://" />
    </rewriteMap>
</rewriteMaps>
</rewrite>

关于iis-7 - IIS7 URL 重写 : How not to drop HTTPS protocol from rewritten URL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2608994/

相关文章:

访问虚拟文件夹时出现 IIS 7 500 错误

iis-7 - IIS 7 服务不可用 503 错误

具有两个不同域名的两个 SSL 证书的 IIS 服务器

tomcat - 将 servlet 映射到 mydomain/myservlet/和 mydomain/myservlet/index.html

asp.net - 为什么事件代码:4011显示为信息

iis-7 - 如何在 IIS 服务器上配置 Vue 2 应用程序?

.htaccess - Htaccess : generate 404 error for a partially path

amazon-web-services - Cloudfront Nginx 重写导致问题

.htaccess - 通过 .htaccess 重定向的 URL 被重定向到不同的位置

javascript - 是否可以在 JavaScript 中重写数组中的所有值而不使用 for 循环?