我可能误解了这个问题,所以我在这里有三个不同的答案。第一个与您使用的“域”一词有关。如果您使用 http 访问公共内容,使用 https 访问私有内容,您最好的选择可能是不要尝试。浏览器对于让 AJAX 代码访问主网页加载方法之外的内容变得非常挑剔。对于我自己的网站项目,我决定将所有内容移至 https 模式,并在通过 http 访问的目录中只留下两个文件:“favicon.ico”的副本和新的“index.html”,其中包含以下内容:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<meta name="Author" content="Me" />
<meta name="Copyright" content= "(C) by Me" />
<title>Switching to https mode ...</title>
</head>
<body onload="window.name='Redirect';window.open('https://www.mysite.com/index.html',
'Redirect');">
<h1><noscript><span style="color:#ff0000;">
This site requires JavaScript to work properly.</span></noscript></h1>
</body>
</html>
下一个答案。检查您的 php.ini 文件以了解“open_basedir”的设置方式。它需要是一个比您希望 Web 服务器出于任何目的访问的所有目录更接近目录树主干的目录。请注意,Apache 设置为使用 PHP 的方式,有时它的 /bin 目录中可能有一个 php.ini 文件的副本,并且您会希望两个 .ini 文件中的 open_basedir 设置相同。
最后一个答案:使用 AJAX 调用的 .php 文件中的相对路径需要非常小心——但首先让我们回顾一下简单的东西。假设您的基本目录是:
/Base //(ignoring drive letter and any "baser" directories here)
在该目录中,您有一些 .html 文件,它们将调用一些 .php 文件,也在该目录中。您可以通过在 XMLHttpRequest 对象的 JavaScript 代码中使用类似的内容来访问它们,在这些 .html 文件之一中:
AJAXobj.open("GET", "./task1.php?URLdata=hi", true);
“./”指定“与此 .html 文件相同的目录”。同时,让我们假设您有一个子目录:
/Base/SubDir
在该目录中,您有一些 .html 文件,它们将像以前一样在 /Base 目录中调用相同的 .php 文件。对于子目录中的 .html 文件,您将需要这个稍微不同的 JavaScript:
AJAXobj.open("GET", "../task1.php?URLdata=hi", true);
“../”指定“包含此 .html 文件的父目录”。
现在是棘手的事情。假设,在 task1.php 文件中,您需要访问不同子目录中的一些数据:
/Base/DataDir
事实证明,.html 文件的位置可能决定了您需要在 .php 文件中指定的路径!进一步来说:
A)如果 task1.php 文件(在 /Base 目录中)直接访问另一个(/DataDir)子目录中的文件,则需要这样的东西:
file("./DataDir/DatFile.txt", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
--无论调用task1.php的.html文件位于何处,这都是正确的
B) 如果 .php 文件为该文件创建一个字符串,并返回该字符串以进行 AJAX 处理(因为 .html 文件中的更多 JavaScript 代码将访问数据文件),那么 PHP 创建的字符串将取决于.html 文件的位置,或者:
"./DataDir/DatFile.txt"
对于 /Base 目录中的任何 .html 文件,或
"../DataDir/DatFile.txt"
对于 /Base/SubDir 中的任何 .html 文件
一个简单的解决方案可能是有两个非常相似的 .php 文件,比如 task1a.php 和 task1b.php 另一种可能是指定绝对路径而不是相对路径:
"https://www.mysite.com/DataDir/DatFile.txt"