У меня есть запрос 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
Я дергаю себя за волосы, у кого-нибудь есть идеи, что это может быть?
Любая помощь будет принята с благодарностью.
Спасибо, Джеймс.
Поскольку браузер НИЧЕГО не знает о ваших путях на стороне сервера, и у него есть только путь, который вы видите в адресной строке, например,
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
Других решений пока нет …