2011-11-02 36 views

回答

1

有趣的想法。我没有想过使用它。但它确实是可能的,尽管它增加了处理响应的一些开销。你也将无法使用GZIP压缩(我已经包含了该设置)。

<?xml version="1.0" encoding="UTF-8"?> 
<configuration> 
    <system.webServer> 
     <rewrite> 
      <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> 
       <preConditions> 
        <preCondition name="Only for HTML"> 
         <add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" /> 
        </preCondition> 
       </preConditions> 
      </outboundRules> 
     </rewrite> 
     <urlCompression doStaticCompression="false" doDynamicCompression="false" /> 
    </system.webServer> 
</configuration> 

UPDATE:

支持在CSS文件链接到外部图像可以用另外的规则非常相似的方式来处理。但请注意,这是一个相当耗费CPU的任务,因为它需要URL重写模块将整个CSS文件与正则表达式匹配,直到找不到匹配为止。

但对于它的乐趣,我增加了一个额外的规则,也将取代HTTP链接到图片在CSS文件:

<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> 
+0

太棒了!我认为这给我带来了大约90%的路程。我仍然有一些通过HTTP进入的.png CSS背景。我是否也可以将此规则应用于文件扩展名? – user547794

+0

谢谢!这非常有效。 – user547794

相关问题