iis-7 – IIS7 URL重写:如何不将HTTPS协议从重写的URL中删除? - 代码日志

iis-7 – IIS7 URL重写:如何不将HTTPS协议从重写的URL中删除?

我正在使用一个使用IIS 7的URL重写功能的网站,从example.com到www.example.com进行永久重定向,并将类似的域名重写为“主”,例如从www。 example.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站点。规则基本上表示“如果网址没有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>
http://stackoverflow.com/questions/2608994/iis7-url-rewriting-how-not-to-drop-https-protocol-from-rewritten-url

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:iis-7 – IIS7 URL重写:如何不将HTTPS协议从重写的URL中删除?