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