AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 76013
Accepted
patridge
patridge
Asked: 2009-10-20 09:29:05 +0800 CST2009-10-20 09:29:05 +0800 CST 2009-10-20 09:29:05 +0800 CST

IIS6 与 IIS7 和 IIS7.5:处理带有加号 (+) 的 URL(不是查询字符串)

  • 772

对于基本 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.aspx或http://somehost/test_some%2bthing.aspx将正常工作,但在 IIS7/IIS7.5 中点击 404。在 IIS7/7.5 中是否有一些配置我缺少让它“看到”URL 中的加号,而不会错过用于确定 HTTP 处理程序的最终扩展名?

iis-7
  • 2 2 个回答
  • 29427 Views

2 个回答

  • Voted
  1. Best Answer
    patridge
    2009-10-21T05:41:22+08:002009-10-21T05:41:22+08:00

    在搜索 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 中使用加号字符。

    • 44
  2. Nathan
    2010-07-03T16:20:43+08:002010-07-03T16:20:43+08:00

    我刚刚想出了如何制定重写规则来说服 IIS7 将加号映射到 URL 中的空格。就我而言,它是为了保持旧书签或超链接正常工作。

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
      <system.webServer>
        <security>
          <requestFiltering allowDoubleEscaping="True" />
        </security>
        <rewrite>
          <rules>
            <rule name="RewriteUserFriendlyURL1" stopProcessing="false">
              <match url="\+" />
              <conditions>
                <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
                <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
              </conditions>
              <action type="Rewrite" url="{UrlDecode:{REQUEST_URI}}" />
            </rule>
          </rules>
        </rewrite>
      </system.webServer>
    </configuration>
    

    有关更多详细信息和参考,请参阅我的博客文章。

    • 10

相关问题

  • 为什么我的站点在配置为直通身份验证时使用 IUSR 帐户?

  • 在 SQL Server 2008 上为 ASP.NET 应用程序设置登录名

  • 使用 Web.config 阻止对子目录的访问

  • IIS 7 中的 URL 重写

  • 无法连接到我的 FTP 服务器,为什么?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    Windows 中执行反向 DNS 查找的命令行实用程序是什么?

    • 14 个回答
  • Marko Smith

    如何检查 Windows 机器上的端口是否被阻塞?

    • 4 个回答
  • Marko Smith

    我应该打开哪个端口以允许远程桌面?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    kch 如何更改我的私钥密码? 2009-08-06 21:37:57 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve