【问题标题】:# symbol in path of file in IIS# IIS 文件路径中的符号
【发布时间】:2019-12-18 06:00:36
【问题描述】:

我在虚拟目录中有很多文件夹,其中很多都有# 的名字, 当从 IIS 请求这样的事情时,它将返回 404 错误, 文件夹名称是John^Rezaei^^#SM 183217,它似乎在 LOG 文件中被分隔,如:

2019-08-11 10:29:31 ::1 GET /web/virtuald/Study/John^Rezaei^^ - 80 - ::1 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/75.0.3770.142+Safari/537.36 - 302 0 0 690

# 到结束被忽略,意味着/web/virtuald/Study/John^Rezaei^^ 请求不是/web/virtuald/Study/John^Rezaei^^#SM 183217/im00001.jpg

即使添加下面的配置也没有任何改变:

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

【问题讨论】:

    标签: iis iis-7 iis-7.5 iis-8


    【解决方案1】:

    据我所知,# 是 url 部分的特殊字符。 # 后面的数据将被视为查询字符串。

    所以你应该使用 %23 来代替“#”。

    因此,您应该使用的虚拟路径的 url 是 John%5ERezaei%5E%5E%23SM%20183217

    更多细节,你可以参考下图:

    【讨论】:

    • 我应该使用%23 来替换#,可能你的意思是我应该使用UrlRewrite 之类的模块来替换或者别的什么?你能解释一下怎么做吗?
    • 我的意思是您需要使用 %23 替换浏览器地址栏中的 # 或让客户端知道它应该使用 %23 而不是 #。网址重写也不会将 # 修改为 %23。
    • 太好了,只需替换它,根据我在 BE 中生成和发送的 Url 地址,然后我可以将 # 替换为 %23。类似strUrl.Replace("#","%23")
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-02
    • 2016-10-10
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多