IIS 7.x 中 URL 中的“+”符号问题

Posted

技术标签:

【中文标题】IIS 7.x 中 URL 中的“+”符号问题【英文标题】:'+' symbol problem in URL in IIS 7.x 【发布时间】:2011-06-04 00:20:07 【问题描述】:

我们在查询字符串中发送一个 html 编码的字符串。它在 IIS 6(Windows 2003)上运行良好。我们最近将网站移至 Windows 2008 (IIS 7.x)。由于移动任何包含“+”号的查询字符串,即“%2b”在服务器上给出错误“404 - 找不到文件或目录。”

有什么帮助吗?

最好的问候。

【问题讨论】:

这是一个答案! serverfault.com/questions/76013/… 在Serverfault上找到了一个解决方案serverfault.com/questions/76013/… 该解决方案是指基本 URL 中的加号而不是查询字符串。你能澄清一下文件URL中的+实际上是指空格还是加号? “+”(编码)表示空格。 "%2b" 表示 +。 "+" 指加号并编码为 "%2b" 哦,好的。 %2b 映射到什么?是否可能涉及任何 url 重写,例如***.com/questions/846934/… 【参考方案1】:

您遇到此错误的原因是 IIS7 出于安全原因引入了新的 URL 过滤规则。 因此,作为 URL 中安全原因的一部分,默认情况下会阻止“+”号。

要解决此问题,您必须在 web.config 文件中设置 allowDoubleEscaping="true"。 这是执行此操作的标签。

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

【讨论】:

【参考方案2】:

假设您可以控制生成 url 的代码,您可以在编码时将 + 更改为 %20 以编程方式处理此问题。

【讨论】:

编码后的+与编码后的%20相同,但未编码后的+编码为%2b的就不一样了。 也许我误解了这个问题 - 我认为问题是 IIS 没有将 + 作为空格处理。如果他实际上有一个加号作为文件 URL 的一部分,那么它必须被编码为 %2b (因此无论如何都应该工作),因为 + 表示查询字符串中的空格。

以上是关于IIS 7.x 中 URL 中的“+”符号问题的主要内容,如果未能解决你的问题,请参考以下文章

在 IIS 上绘制的 PdfSharp Barcode 128 使符号间隙

iOS:URL 字符串中的 & 符号问题

如何防止 IIS 7.5 缓存符号链接内容?

URL 中的 AppleScript 哈希符号 (#)

如何处理 Django URL 中的 & 符号?

从 AngularJS url 中删除片段标识符(# 符号)