Iis 7 IIS 7重新写入-我可以删除“吗?”;页面包含安全和非安全项目;

Iis 7 IIS 7重新写入-我可以删除“吗?”;页面包含安全和非安全项目;,iis-7,url-rewriting,Iis 7,Url Rewriting,我想知道是否有人编写了IIS 7重写规则来消除此错误。基本上,我希望如果页面包含“https://”,那么页面上包含的所有文件都将被重新写入“https://”。从理论上讲,应该消除错误,纠正这个有趣的想法。我没想过用它来做那件事。但是这当然是可能的,尽管这会给处理响应增加一些开销。此外,您将无法使用GZIP压缩(我已经包括了该设置) 更新: 对CSS文件中外部图像链接的支持可以通过添加规则以非常类似的方式处理。但是请注意,这是一项非常耗费CPU的任务,因为它需要URL重写模块将整个CSS文

我想知道是否有人编写了IIS 7重写规则来消除此错误。基本上,我希望如果页面包含“https://”,那么页面上包含的所有文件都将被重新写入“https://”。从理论上讲,应该消除错误,纠正这个有趣的想法。我没想过用它来做那件事。但是这当然是可能的,尽管这会给处理响应增加一些开销。此外,您将无法使用GZIP压缩(我已经包括了该设置)


更新:

对CSS文件中外部图像链接的支持可以通过添加规则以非常类似的方式处理。但是请注意,这是一项非常耗费CPU的任务,因为它需要URL重写模块将整个CSS文件与正则表达式进行匹配,直到再也找不到匹配为止

但为了好玩,我添加了一个额外的规则,它也将替换CSS文件中图像的http链接:

<outboundRules>
    <rule name="Force HTTPS links when using HTTPS" preCondition="Only for HTML" stopProcessing="false">
        <match filterByTags="A, Area, Base, Form, Frame, IFrame, Img, Input, Link, Script" pattern="^http://(.*)" />
        <action type="Rewrite" value="https://{R:1}" />
        <conditions>
            <add input="{HTTPS}" pattern="^ON$" />
        </conditions>
    </rule>
    <rule name="Force HTTPS in CSS when using HTTPS" preCondition="Only for CSS">
        <match filterByTags="None" pattern="url\(('|&quot;){0,1}http://(.*?)('|&quot;){0,1}\)" />
        <action type="Rewrite" value="url({R:1}https://{R:2}{R:3})" />
        <conditions>
            <add input="{HTTPS}" pattern="^ON$" />
        </conditions>
    </rule>
    <preConditions>
        <preCondition name="Only for HTML">
            <add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" />
        </preCondition>
        <preCondition name="Only for CSS">
            <add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/css" />
        </preCondition>
    </preConditions>
</outboundRules>


它可能更容易在HTML中使用。

太棒了!我想这让我达到了90%的目标。因此,我仍然有一些.png CSS背景,它们是通过HTTP传入的。我还可以将此规则应用于文件扩展名吗?
<outboundRules>
    <rule name="Force HTTPS links when using HTTPS" preCondition="Only for HTML" stopProcessing="false">
        <match filterByTags="A, Area, Base, Form, Frame, IFrame, Img, Input, Link, Script" pattern="^http://(.*)" />
        <action type="Rewrite" value="https://{R:1}" />
        <conditions>
            <add input="{HTTPS}" pattern="^ON$" />
        </conditions>
    </rule>
    <rule name="Force HTTPS in CSS when using HTTPS" preCondition="Only for CSS">
        <match filterByTags="None" pattern="url\(('|&quot;){0,1}http://(.*?)('|&quot;){0,1}\)" />
        <action type="Rewrite" value="url({R:1}https://{R:2}{R:3})" />
        <conditions>
            <add input="{HTTPS}" pattern="^ON$" />
        </conditions>
    </rule>
    <preConditions>
        <preCondition name="Only for HTML">
            <add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" />
        </preCondition>
        <preCondition name="Only for CSS">
            <add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/css" />
        </preCondition>
    </preConditions>
</outboundRules>