我在Apache服务器(典型的xampp包)中托管了一些rest API。
当我使用http方法攻击资源时(无论哪种:put,post,get...),并且URL包含编码的冒号%3A,服务器有时会回复403错误。这似乎取决于服务器的文件夹结构。如果存在一个现有文件夹,并且您的URL攻击该文件夹中包含%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)
这是相当烦人的,因为许多将出现在url中的值都是telURI,看起来像这样
tel:+34678678678
所以请不要告诉我不要用冒号,因为那是不可能的,我该怎么做呢?
1条答案
按热度按时间dfuffjeb1#
我只能找到一个有效的信息,这(从2006年10月)-在这里。
显然,这个错误不会出现在Linux上,它会发生在Windows平台上。根据源代码,一个简短的名称,后面跟着冒号(:)可以被解释为驱动器名(为什么会这样,为什么file://不表示这一点-我不知道)。
我不得不解决这个问题,但我可以自己设置链接(不知道你是否有奢侈品)。我的解决方案是:
urlencode($uri) → urlencode(strtr($uri, ":", "_"))
SELECT ... FROM ... WHERE uri = REPLACE(@@uri, ":", "_")
后搜索这些URI