首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >URL编码冒号(%3A)在403中解析

URL编码冒号(%3A)在403中解析
EN

Stack Overflow用户
提问于 2014-10-31 10:33:25
回答 1查看 1.7K关注 0票数 1

我在Apache服务器中托管了一些rest (一个典型的xampp包)。

当我使用http方法攻击资源时(不管是: put、post、get.)而URL包含编码的冒号%3A,服务器有时会回复403个错误。它似乎取决于服务器的文件夹结构。如果存在一个现有文件夹,而您的url攻击该文件夹中包含%3A的资源,则服务器将返回403。当它不包含%3A时,它会像它应该返回的那样返回404。

像这样的结构:

代码语言:javascript
运行
复制
htdocs/apis/userContext
htdocs/apis/subscriptions

http://localhost/apis/userContext/users/tel%3A2032342349 Works (returns 404 not found, because users doesn't exist)
http://localhost/apis/userContext/tel%3A2032342349 Doesn't work (returns 403)
http://localhost/subscriptions/tel%3A2032342349 Doesn't work (returns 403)
http://localhost/nonexistingfolder/tel%3A2032342349 works (returns 404, becasue nonexistingfolder doesn't exist)

这很烦人,因为urls中将要出现的许多值都是telURIs,如下所示

代码语言:javascript
运行
复制
tel:+34678678678

所以,请不要告诉我不要在那里使用冒号,因为这根本不可能。我怎么才能解决这个问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-31 13:27:45

我只能找到一个关于这个的有效信息(从2006年10月开始)- 这里

很明显,这个错误并不出现在Linux上,而是发生在Windows平台上。根据消息来源,短名称(后面跟着冒号(:)可以解释为驱动器名(原因是什么以及为什么文件://不表示--我不知道)。

我必须解决这个问题,但我可以自己设置链接(不知道你是否有奢侈品)。我的解决办法是:

  • 用选择的字符替换URI中的冒号(我选择了下划线)- urlencode($uri) → urlencode(strtr($uri, ":", "_"))
  • 在应用相同的替换( SELECT ... FROM ... WHERE uri = REPLACE(@@uri, ":", "_") )之后搜索那些URI
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26672560

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档