0

所以我以前从未见过这种情况。我有一个使用 Debian Linux 和 Apache 2.2 的 EC2 服务器(第一次设置)。使用这样的路径/js/file.js正在寻找http://js/file.js. 在我的本地机器和我的 Dreamhost 共享服务器上,我没有这个问题。事实上,我以前从未在服务器上看到过这个问题。它应该做的是寻找http://domain.com/js/file.js. 有谁知道为什么会发生这种情况?我已经倾注了我的 php.ini 文件并且没有任何提示我应该更改或添加什么来解决这个问题。

4

2 回答 2

1

你在你的 php.ini 文件上“倒”了什么样的糖浆?它可能把作品搞砸了!;)

您是否通过浏览器(查看 > 页面源代码)查看了输出 HTML,您得到的是http://js/file.js什么?是src="http://js/file.js"在标签里吗?添加http://domain.com/应该是浏览器的工作,而不是服务器。一些浏览器会显示已添加域的 URL,而另一些浏览器则会准确显示您发送到页面的内容。您是否发送任何可能缺少域的标签?我认为它只应该适用于相对URI,但值得检查。您实际上使用的是 js/file.js 还是 /js/file.js?他们非常不同。

于 2013-08-21T17:37:41.887 回答
0

好的,所以我想通了。问题是在我的本地机器和我的其他服务器上我不在根域,所以我$_SERVER['SCRIPT_NAME'].DIRECTORY_SEPARATOR."js/"用来确定根 url 来为 js 文件路径创建别名。这回来了/app/js/。当文件位于某个域的子文件夹中时,这很好用,例如domain.com/app/js/file.js.

但是,一旦我在我的服务器上安装了这个应用程序,它就是根应用程序$_SERVER['SCRIPT_NAME'].DIRECTORY_SEPARATOR."js/"正在返回//js/。这就是问题所在!那不一样/js/。那是绕过域作为 url 的一部分,而是告诉浏览器看起来http://js像是一个完全限定的 url。我假设//这是http://虽然我以前从未尝试过的简写。

为了解决这个问题,我根据 Yii 框架中的某些内容将这个函数组合在一起,这就是我在这个应用程序中使用的。

function getBaseUrl() {
    $scriptName=basename($_SERVER['SCRIPT_FILENAME']);
    if(basename($_SERVER['SCRIPT_NAME'])===$scriptName)
        $_scriptUrl=$_SERVER['SCRIPT_NAME'];
    else if(basename($_SERVER['PHP_SELF'])===$scriptName)
        $_scriptUrl=$_SERVER['PHP_SELF'];
    else if(isset($_SERVER['ORIG_SCRIPT_NAME']) && basename($_SERVER['ORIG_SCRIPT_NAME'])===$scriptName)
        $_scriptUrl=$_SERVER['ORIG_SCRIPT_NAME'];
    else if(($pos=strpos($_SERVER['PHP_SELF'],'/'.$scriptName))!==false)
        $_scriptUrl=substr($_SERVER['SCRIPT_NAME'],0,$pos).'/'.$scriptName;
    else if(isset($_SERVER['DOCUMENT_ROOT']) && strpos($_SERVER['SCRIPT_FILENAME'],$_SERVER['DOCUMENT_ROOT'])===0)
        $_scriptUrl=str_replace('\\','/',str_replace($_SERVER['DOCUMENT_ROOT'],'',$_SERVER['SCRIPT_FILENAME']));
    else
        throw new Exception('The App is unable to determine the entry script URL.'));
    return rtrim(dirname($_scriptUrl), '\\/');
}

我希望这对其他人有帮助。

于 2013-08-21T19:02:48.533 回答