我有一个ajax请求,我正在尝试调用位于以下位置的特定文件:
ROOT/admin/functions/upload/filename.php
发出请求的页面位于:
ROOT/admin/customers/123
通过htaccess从
修改ROOT/admin/customer.php?id=123
我已经尝试了我能想到的每种路径组合,但是当我使用
时,我会遇到一些奇怪的行为../functions/upload/filename.php
它在
中查找文件ROOT/functions/uploads/filename.php
当我使用
时functions/upload/filename.php
它在
中查找文件ROOT/admin/customers/functions/uploads/filename.php
所以我试过
../admin/functions/upload/filename.php
它看起来在
ROOT/admin/admin/functions/upload/filename.php
我把头发拉到这里,有没有人知道这可能是什么?
非常感谢任何帮助。
谢谢,詹姆斯。
答案 0 :(得分:1)
由于浏览器知道关于服务器端路径的NOTHING,并且它只有你在地址栏中看到的路径,例如
http://example.com/ROOT/admin/customers/123
然后如果你的ajax代码看起来像
$.ajax('functions/foo/bar.php');
然后ajax调用将请求
http://example.com/ROOT/admin/customers/123/functions/foo/bar.php
同样,添加../
只会剥离源页面地址的级别:
$.ajax('../../functions/foo/bar.php');
结果
http://example.com/ROOT/admin/customers/123/../../functions/foo/bar.php
^-A-^
^-------B------^
http://example.com/ROOT/admin/functions/foo.bar.php
你可能想要
$.ajax('/ROOT/functions/foo/bar.php');
使用前导/
,浏览器会忽略url中的所有子目录内容,并使用ajax调用的整个路径作为整个路径。
http://example.com/ + /ROOT/functions/foo.bar.php