使用/directory/file.js不包括域

时间:2013-08-21 17:23:18

标签: php apache2.2

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

2 个答案:

答案 0 :(得分:1)

你喝了什么样的糖浆" pour"在你的php.ini文件?它可能已经搞砸了作品! ;)

您是否通过浏览器查看了输出HTML(查看>页面来源),您获得的是http://js/file.js?标签中是src="http://js/file.js"吗?添加http://domain.com/应该是浏览器的工作,而不是服务器。某些浏览器显示已添加域的URL,而其他浏览器则显示您发送到页面的确切内容。您是否发送了可能缺少域名的任何标签?我认为它只应用于相对 URI,但值得检查。你真的使用过js / file.js或/js/file.js吗?他们非常不同。

答案 1 :(得分:0)

好的,所以我明白了。问题是,在我的本地计算机和我的其他服务器上,我不在根域,因此我使用$_SERVER['SCRIPT_NAME'].DIRECTORY_SEPARATOR."js/"来确定根网址,以便为js文件路径创建别名。这返回/app/js/。当文件位于域中某个子文件夹中的某个位置时,这可以正常工作,例如domain.com/app/js/file.js

但是,当我在我的服务器上安装此应用程序时,根应用程序$_SERVER['SCRIPT_NAME'].DIRECTORY_SEPARATOR."js/"正在返回//js/。那就是问题!这与/js/不同。这是绕过域名作为网址的一部分,而是告诉浏览器查看http://js,因为它是一个完全合格的网址。我假设//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), '\\/');
}

我希望这有助于其他人。