2016-09-19 46 views
0

我一直在撞牆,試圖讓一些IIS重定向規則正常工作。我在Stack Overflow和IIS.net上搜索和閱讀了這些東西,但它根本不起作用。IIS重寫模塊 - 如何重定向維護路徑和查詢字符串,但添加額外的查詢字符串參數?

我想它在我的本地(實際)IIS,我已經安裝了重寫2.0模塊,並嘗試做了修復安裝就可以了。我在管理員cmd系列上做了一次iisreset,比我提到的還要多。

在我的hosts文件中,我爲URL my.test.com設置了127.0.0.1。

我要實現的是給一個子域網址重定向到主域名URL與一個額外的查詢字符串參數,同時保持現有的路徑和如果它們存在的查詢字符串值是什麼。

我設置3個規則如下是在網站的根文件夾:

<system.webServer> 
    <rewrite> 
     <rules> 
      <rule name="PathAndQueryString" enabled="true" stopProcessing="true"> 
       <match url="(/\w*)(\?\w*=\w*)([&amp;\w*=\w*]*)" /> 
       <action type="Redirect" url="https://www.test.com{R:1}{R:2}{R:3}&amp;param=value" appendQueryString="false" /> 
       <conditions logicalGrouping="MatchAll" trackAllCaptures="false"> 
        <add input="{HTTP_HOST}" pattern="my.test.com" /> 
       </conditions> 
      </rule> 
      <rule name="Querstring" enabled="true" stopProcessing="true"> 
       <match url="(\?\w*=\w*)([&amp;\w*=\w*]*)" /> 
       <action type="Redirect" url="https://www.test.com{R:1}{R:2}&amp;param=value" appendQueryString="false" /> 
       <conditions> 
        <add input="{HTTP_HOST}" pattern="my.test.com" /> 
       </conditions> 
      </rule> 
      <rule name="DomainOnly" enabled="true" stopProcessing="true"> 
       <match url=".*" /> 
       <action type="Redirect" url="https://www.test.com?param=value" appendQueryString="false" /> 
       <conditions> 
        <add input="{HTTP_HOST}" pattern="my.test.com" /> 
       </conditions> 
      </rule> 
     </rules> 
    </rewrite> 
</system.webServer> 

不幸的是,儘管測試模式和確認{R:X}捕獲是正確的,當我嘗試測試此使用邊緣,Chrome瀏覽器,火狐瀏覽器和IE瀏覽器的所有這些IIS行爲像規則不存在。

測試:

無上述測試工作,他們獲得服務不重定向。

我也試圖把用作匹配URL模式的一部分的狀態模式,但它沒有用,要麼工作;事實上,我在閱讀Stack Overflow後將其移到了條件之後,該文章說當規則位於網站的根目錄中時,它不包含主機,但仍然沒有任何效果。

任何幫助將不勝感激。

UPDATE 1:對於路徑和查詢字符串規則試圖從該圖案的那個開始去除加粗部分(/ \ W *)。沒有任何影響。

更新2:試圖使非常喜怒無常「失敗請求跟蹤」功能,當它實際上是工作的,它說,沒有任何匹配URL模式是匹配的,除了它現在已經開始踢在第三規則重定向,但由於顯而易見的原因,不保持路徑和其他查詢字符串。

UPDATE 3:在Edge和IE上,沒有任何規則可以使用。在Chrome和FF上,只有域名重定向似乎正在工作 - 但是如果我禁用域名唯一規則並重新啓動IIS,就好像規則仍然存在--FFS給了我力量這個垃圾現在真的開始沸騰我的血液 - 這不應該是那該死的困難。

回答

1

在我給出答案,在微軟喊出毓鼎誰回答這個職位上的IIS的一個副本。網絡論壇,並提供了大部分答案。

所以,我們去,如果你想重寫規則,從1 URL重定向到另一個維護路徑和查詢字符串,如果他們存在,同時加上一個硬編碼的URL參數與適當的&或?那麼這裏是你需要的規則。

在規則中,您將從my.test.com重定向到www.test.com,但顯然您需要替換下面規則中的這兩個URL,並將硬編碼參數「ExtraParam = SomeValue」更改爲你需要什麼。

<system.webServer> 
<rewrite> 
    <rules> 
     <rule name="DomainOnly" enabled="true" stopProcessing="true"> 
      <match url="(.*)" /> 
      <conditions trackAllCaptures="true"> 
       <add input="{HTTP_HOST}" pattern="my.test.com" /> 
       <add input="{REQUEST_URI}" pattern="/.+" negate="true" /> 
      </conditions> 
      <action type="Redirect" url="http://www.test.com?ExtraParam=SomeValue" redirectType="Temporary" /> 
     </rule> 
     <rule name="PathOnly" enabled="true" stopProcessing="true"> 
      <match url="(.*)" /> 
      <conditions trackAllCaptures="true"> 
       <add input="{REQUEST_URI}" pattern="/.+" /> 
       <add input="{REQUEST_URI}" matchType="Pattern" pattern="\?.+" ignoreCase="true" negate="true" /> 
       <add input="{HTTP_HOST}" pattern="my.test.com" /> 
      </conditions> 
      <action type="Redirect" url="http://www.test.com{C:0}?ExtraParam=SomeValue" redirectType="Temporary" /> 
     </rule> 
     <rule name="Querstring" stopProcessing="true"> 
      <match url="(.*)" /> 
      <conditions trackAllCaptures="true"> 
       <add input="{REQUEST_URI}" pattern="/.+" /> 
       <add input="{QUERY_STRING}" pattern=".*" /> 
       <add input="{HTTP_HOST}" pattern="my.test.com" /> 
      </conditions> 
      <action type="Redirect" url="http://www.test.com{C:0}&amp;ExtraParam=SomeValue" appendQueryString="false" redirectType="Temporary" /> 
     </rule> 
    </rules> 
</rewrite> 

在我眼裏URL重寫2.0模塊有一個bug。基本癥結在於,你無法在主要匹配模式中匹配任何東西,你必須根據條件做所有事情。因此,你可以爲比賽設置一個模式的事實是毫無意義的,因爲如果你試圖匹配除(。*)之外的任何東西,即匹配任何類似我最初做的事情,它就不會做你想做的事情,撲-磚牆岬。

更令人討厭的是,在IIS管理器中,這個UI非常無用。你可以測試你的模式 - 我做過了 - 他們會工作,但它真正測試的是regEx模式。

我們真正需要的是在規則層面的測試。換句話說,您輸入一個URL,它會告訴您是否有任何規則匹配以及哪些條件通過或失敗。是的,如果你啓用了失敗的請求追蹤規則,那麼你可以得到這些信息,但是它是一個漫長的過程,可以隨意使用和工作(只要清除舊的日誌並觀察它,然後停止記錄,直到關閉它爲止;再次)的東西,應該是微不足道的。

相關問題