我正在Apache服务器(一个典型的xampp包)中托管一些其他API。
当我使用http方法攻击资源时(以put:post,get ...为准)并且URL包含编码冒号%3A,服务器有时会回复403错误。它似乎取决于服务器的文件夹结构。如果存在现有文件夹并且您的网址攻击该文件夹中包含%3A的资源,则服务器返回403.当它不包含%3A时,它会返回404,就像它应该的那样。
有这样的结构:
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)
这很烦人,因为网址中出现的很多值都是telURIs,看起来像这样
tel:+34678678678
所以请不要告诉我不要在那里使用冒号,因为这根本不可能。我怎么能解决这个问题?
答案 0 :(得分:0)
我只能找到一个有关此信息的有效信息(自2006年10月起) - here。
显然,这个错误不会出现在Linux上,它发生在Windows平台上。根据消息来源,一个简短的名称,后跟冒号(:)可以解释为一个驱动器名称(为什么这个和为什么file://不表示 - 我不知道)。
我必须解决这个问题,但我可以自己设置链接(不知道你是否有奢侈品)。我的解决方案是:
urlencode($uri) → urlencode(strtr($uri, ":", "_"))
SELECT ... FROM ... WHERE uri = REPLACE(@@uri, ":", "_")