我可以在IIS的文件夹中加上+号吗?

时间:2010-01-06 15:39:59

标签: asp.net internet-explorer iis url-rewriting url-routing

我很确定无法做到这一点,但我正在寻找一种黑客或方法将+放在文件夹名称中,例如

http://www.mysite.com/cats+dogs/Default.aspx

我正在使用IIS 7,并尝试创建虚拟目录来实现此目的,但它无效。我不允许将%2B放在资源管理器文件夹或虚拟文件夹名称中。

我有什么想法可以解决这个问题吗?我们已经打印了带有网址的小册子,并且想知道是否有某些方法可以对其进行别名处理或者可能会有一些技巧。

编辑:我能够通过创建一个带有+的虚拟文件夹来解决这个问题,然后重定向到一个URL,该URL指向包含内容的虚拟目录。

3 个答案:

答案 0 :(得分:7)

IIS 7.0 Breaking changes for ASP.NET 2.0 applications in Integrated Mode

以下是该页面的相关摘录,其中显示了解决方法/修复方法。

  

请求限制和URL处理   由于以下更改结果   如何IIS的额外限制   处理传入的请求及其进程   网址。

     

11)请求包含未编码的URL   路径中的“+”字符(不是   querystring)默认被拒绝

     

您将收到HTTP错误404.11 -   找不到:请求过滤   模块配置为拒绝请求   包含双重逃脱   序列。

     

发生此错误,因为IIS是   默认配置为拒绝尝试   通常对URL进行双重编码   表示尝试执行   规范化攻击。

     

解决方法:

     

1)需要使用的应用程序   URL路径中的“+”字符   可以通过设置禁用此验证   allowDoubleEscaping属性   该   system.webServer /安全/的requestFiltering   配置部分   应用程序的web.config。然而,   这可能会使您的应用更多   易受恶意网址攻击:

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

答案 1 :(得分:5)

你可能会对网址重写感到幸运。这可以在web.config中或使用httpmodule轻松完成。

看起来你仍然需要为你的+字符问题使用下面提到的空间或IIS修复,但为了将来的一些灵活性,你总是可以包含用于将网址映射到文件的URL重写。

  <httpModules>
      <add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
  </httpModules>

  <rewriter>
    <rewrite url="~/cats dogs/Default.aspx" to="~/MyRealFile.aspx" />
  </rewriter>

答案 2 :(得分:1)

只需在文件夹名称中添加一个空格:“猫狗”。

使用加号字符对空格字符进行编码,因此当服务器看到加号字符时,它将获得包含空格的文件夹。