2011-01-05 103 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>