2014-04-01 44 views
1

我正在使用IIS 7.5與Url重寫模塊。這是我的規則。IIS Url重寫不適用於某些擴展名和字符

<rule name="stash.domain.com" stopProcessing="true"> 
    <match url="(.*)" /> 
    <action type="Rewrite" url="http://192.168.5.9:8080/{R:1}" logRewrittenUrl="true" /> 
    <conditions> 
     <add input="{HTTP_HOST}" pattern="^stash.domain.com$" /> 
    </conditions> 
</rule> 

一切正常,但如果URL包含和「的.cs」的延伸,或者如果‘+’號是在URL中的任意位置。

例如,這些不工作

http://stash.domain.com/projects/MDX/repos/medxchange.library/browse/Src/MedXChange.Api/CoreServiceUrls.cs 
http://stash.domain.com/projects/MDX/repos/medxchange.library/browse/Src/MedXChange.Api/CoreService+Urls 

我從IIS以下響應與這些網址。

404 - File or directory not found. 

但是,這些都將工作,但是,代理服務器將返回一個不錯的「找不到文件」,它告訴我的規則進行處理和轉發請求正確。

http://stash.domain.com/projects/MDX/repos/medxchange.library/browse/Src/MedXChange.Api/CoreServiceUrls 

我懷疑IIS有一些頂級濾波要麼防止被服務特定文件擴展名,或嘗試在IIS中nativelly爲他們服務,繞過重寫規則。另外,我想除了「+」之外還有更多的字符會導致重寫規則被忽略。

回答

1

我也有這個問題。事實證明,IIS正試圖幫助並防止遠程用戶下載源代碼,這正是我試圖允許的!

定盤進入請求篩選並刪除所有麻煩的條目,雖然我跳過的,只是把這個在web.config:

<system.webServer> 
    <security> 
    <requestFiltering> 
     <fileExtensions> 
     <clear /> 
     </fileExtensions> 
    </requestFiltering> 
    </security> 
</system.webServer> 
+0

您可能還需要設置<的httpRuntime requestPathInvalidCharacters = 「」/>以及,如果您的網址中有任何奇怪的字符,如&,*或:,IIS會將它們過濾爲「潛在危險」。 –