2017-08-25 65 views
0

我有一組ARR重定向/重寫做到這一點的規則:如何匹配除一個之外的所有組合?

  1. 重定向到HTTPS每當子域tfs在URL
  2. 拉從網絡上的其他服務器的內容。

這裏是我的配置:

<rule name="TFS Redirect" enabled="true" stopProcessing="true"> 
    <match url="^((?!tfs).)*$" /> 
    <conditions logicalGrouping="MatchAll" trackAllCaptures="false"> 
     <add input="{HTTP_HOST}" pattern="tfs.domain.com" /> 
    </conditions> 
    <action type="Redirect" url="https://tfs.domain.com/tfs" appendQueryString="false" /> 
</rule> 
<rule name="TFS Rewrite" enabled="true" stopProcessing="true"> 
    <match url="^tfs(.*)" /> 
    <conditions logicalGrouping="MatchAll" trackAllCaptures="false" /> 
    <action type="Rewrite" url="http://server3:8080/{R:0}" /> 
</rule> 

麻煩的是,這種設置與我讓我們的加密配置發生衝突。不知怎的,我需要強制執行上述規定的一切,除了這個網址:

http://tfs.domain.com/.well-known/acme-challenge/*

這是這個問題的答案驅動自動證書更新過程傳入遠程挑戰。但是,由於規則,ACME服務器無法到達本地IIS以進行驗證,並且證書未續訂。

我怎樣才能讓這一個URL通過,而抓住其他一切?有沒有辦法給條件添加一個異常?或者我應該完全刪除該條件,並完全依賴RegEx表達式來處理所有這些問題?

回答

0

經過幾小時RegEx fiddling,我想出了修復。

這裏的新規則:

<rule name="TFS Redirect" enabled="true" stopProcessing="true"> 
    <match url="^(.*)" /> 
    <conditions logicalGrouping="MatchAll" trackAllCaptures="false"> 
     <add input="{HTTPS}" pattern="^OFF$" /> 
     <add input="{HTTP_HOST}" pattern="^tfs\.domain\.com$" /> 
     <add input="{URL}" pattern="^/\.well-known*" negate="true" /> 
    </conditions> 
    <action type="Redirect" url="https://tfs.domain.com/tfs" appendQueryString="false" redirectType="Found" /> 
</rule> 

我不願意承認,我不知道我在哪裏得到了較早的表達,但它的路要走。我所要做的就是放棄它,調整一些條件,一切順利。

此規則捕獲並重定向這些請求:

  1. 非HTTPS URL的所有請求tfs.domain.com
  2. 以上所有的,除了那些不與/.well-known{URL}服務器啓動變量

僅供參考我找到this後選擇了302重定向。

相關問題