2011-01-05 136 views
7

我們正在查詢字符串中發送HTML編碼的字符串。它在IIS 6(Windows 2003)上工作正常。我們最近將網站移至Windows 2008(IIS 7.x)。由於移動任何包含「+」符號的查詢字符串,即「%2b」在服務器「404 - 文件或目錄未找到」上給出錯誤。IIS 7中URL中的'+'符號問題

任何幫助?

此致敬禮。

+0

實測值上Serverfault http://serverfault.com/questions/76013/iis6-vs-iis7-and-iis7-5-handling-urls-with-plus-sign-in一個解決方案-base-not-querystri – Kashif 2011-01-05 13:22:36

+0

該解決方案引用基址中的加號而不是查詢字符串。你能否澄清+實際上是指文件URL中的空格還是加號? 「+」(編碼)意味着空間。 「%2b」是指+。 – 2011-01-05 13:29:04

+0

「+」表示加號並編碼爲「%2b」 – Kashif 2011-01-05 13:32:42

回答

5
+0

這包含我的解決方案 - 乾杯! – stephen 2012-05-17 13:27:02

+0

只有安裝了URL重寫模塊,該解決方案才能正常工作。否則,您將得到一個令人討厭的「HTTP錯誤500.19 - 內部服務器錯誤 請求的頁面無法訪問,因爲頁面的相關配置數據無效。」錯誤。只是一個頭。 – 2015-09-29 21:49:19

+0

我有#這個問題登錄文件名,它適用於我。 – Alireza 2016-09-29 18:07:19

0

編碼以編程方式處理這個時候你可以改變+至20%,假設你有能對其加以產生的URL代碼控制。

+0

編碼後的「+」與編碼的「%20」相同,但編碼爲「%2b」的未編碼的「+」不相同。 – Guffa 2011-01-05 13:24:43

+1

也許我誤解了這個問題 - 我認爲這個問題是IIS不處理+作爲一個空間。如果他實際上有一個加號作爲文件URL的一部分,那麼它必須被編碼爲%2b(因此應該已經工作了),因爲+表示查詢字符串中的空格。 – 2011-01-05 13:27:11

7

您面臨此錯誤的原因是IIS7出於安全原因引入了新的URL過濾規則。 因此默認阻止'+'符號是URL中安全原因的一部分。

要解決此問題,您必須在web.config文件中設置allowDoubleEscaping =「true」。 這是做這件事的標籤。

<system.webServer> 
<security> 
    <requestFiltering allowDoubleEscaping="true"> 
    </requestFiltering> 
</security>