Iis-7

IIS6 與 IIS7 和 IIS7.5:處理帶有加號 (+) 的 URL(不是查詢字元串)

  • March 19, 2019

對於基本 URL(不是查詢字元串)中帶有加號 (+) 的任何 URL,IIS7 和 IIS7.5(Windows Server 2008 和 2008 R2)似乎不會將 URL 轉發到 ASP.NET 應用程序上的預設處理程序. 我開始注意到自定義 HTTP 處理程序的問題,*.html但我對*.aspx. IIS6 (Server 2003) 對這些相同的 URL 沒有任何問題。

為了重現這個問題,在一個 ASP.NET 站點中,我創建了一組 ASPX 文件,這些文件執行了一個簡單的 Response.Write 並具有不同的名稱:

  1. test_something.aspx
  2. test_some+thing.aspx
  3. test_something.aspx

第三個文件是測試IIS7

$$ .5 $$將加號視為空格(就像在查詢字元串中一樣);情況似乎並非如此。有了所有這些文件,在訪問任何 ASP.NET 處理程序之前,在 IIS6 中點擊http://somehost/test_some+thing.aspxhttp://somehost/test_some%2bthing.aspx將正常工作,但在 IIS7/IIS7.5 中點擊 404。在 IIS7/7.5 中是否有一些配置我缺少讓它“看到”URL 中的加號,而不會錯過用於確定 HTTP 處理程序的最終副檔名?

在搜尋了 IIS 和 plus 的更多組合後,似乎 IIS7

$$ .5 $$設置為預設拒絕帶有加號的 URL,因為害怕使用該字元;不過,查詢字元串中仍然允許使用該符號。解決方案是更改 requestFiltering 屬性預設值以允許使用<system><webServer><security><requestFiltering>命令行呼叫進行雙重編碼的字元(最終修改您的 ASP.NET web.config):

%windir%\system32\inetsrv\appcmd set config "Default Web Site" -section:system.webServer/security/requestFiltering -allowDoubleEscaping:true

這可能比人們更喜歡使用他們的網站更危險,但似乎沒有一種方法比一攬子允許的更具體。警告是關於在 URL 中使用加號與其作為空格的典型翻譯之間可能發生的不匹配。看起來唯一的另一種選擇是完全停止在您的 URL 中使用加號字元。

引用自:https://serverfault.com/questions/76013