2011-11-02 23 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