2012-08-01 25 views
1

我想將所有HTTP請求重定向到HTTPS,除了文件「/blah.txt」。這是我一直在嘗試的基本重寫規則。我試着使用{REQUEST_FILENAME}和{URL}。我嘗試了幾種我認爲應該匹配的不同模式。下面無法獲取ASP.NET URL重寫以排除特定文件

規則重定向請求HTTPS 包括請求blah.txt

 <rewrite> 
     <rules> 
      <clear /> 
      <rule name="Redirect to HTTPS" stopProcessing="true"> 
       <match url="(.*)" /> 
       <conditions logicalGrouping="MatchAll" trackAllCaptures="false"> 
        <add input="{HTTPS}" pattern="^OFF$" /> 
        <add input="{REQUEST_FILENAME}" matchType="Pattern" pattern="blah\.txt$" ignoreCase="true" negate="true" /> 
       </conditions> 
       <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" /> 
      </rule> 
     </rules> 
    </rewrite> 

回答

2

感謝布萊恩改變我的思想方向。有時候我覺得我的解決方案會基於無缺陷的代碼工作。事實上,重寫器中存在一個錯誤,這使得我第一次嘗試寫規則失敗。然而,這條規則不工作:

 <rewrite> 
     <rules> 
      <clear /> 
      <rule name="Temp" stopProcessing="true"> 
       <match url="(.*)" /> 
       <conditions logicalGrouping="MatchAll" trackAllCaptures="false"> 
        <add input="{REQUEST_FILENAME}" pattern="blah\.txt$" /> 
       </conditions> 
       <action type="None" /> 
      </rule> 
      <rule name="Redirect to HTTPS" stopProcessing="true"> 
       <match url="(.*)" /> 
       <conditions logicalGrouping="MatchAll" trackAllCaptures="false"> 
        <add input="{HTTPS}" pattern="^OFF$" /> 
       </conditions> 
       <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" /> 
      </rule> 
     </rules> 
    </rewrite> 

把匹配規則中的其他規則的前面,以使它停止規則處理似乎工作。

+0

也爲我工作 – hupseb 2015-05-07 11:34:00

1

我只看到一個規則......似乎一切都匹配。你至少需要兩條規則。

我不熟悉IIS重寫的功能。所以有兩個問題:

有沒有「無所事事」的行動?

是否所有包含規則都不匹配ALL請求?您可能需要先放置blah.txt規則。

+0

我不明白你的觀點。此規則有兩個條件必須滿足才能執行:關閉HTTPS和請求的文件名不得爲「blah.txt」。如果這些都符合,則規則運行。 「不採取任何行動」是,如果文件名爲「blah.txt」,則沒有匹配的規則。 – TechSavvySam 2012-08-02 16:34:03

+0

我的錯誤,我誤解了你的規則。然而,我的下一步是嘗試創建第二個規則(先把它)與blah.txt正確匹配並重定向到某個測試頁面。縮小你的問題。 – Bryan 2012-08-02 20:34:10