2013-08-21 27 views
0

所以我從來沒有見過這個。我有一臺EC2服務器(第一次設置)使用Debian Linux和Apache 2.2。使用這樣的路徑/js/file.js正在尋找http://js/file.js。在我的本地機器和我的dreamhost共享服務器上,我沒有這個問題。事實上,我從來沒有在服務器上看到過這個問題。它應該做的是尋找http://domain.com/js/file.js。有沒有人有一些想法,爲什麼會發生這種情況?我傾注了我的php.ini文件,並沒有提示我應該更改或添加以解決此問題。使用/directory/file.js不包括域

回答

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/不一樣。這是繞過網域的一部分,而是告訴瀏覽器看看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), '\\/'); 
} 

我希望這可以幫助別人。

1

什麼樣的糖漿「倒」在你的php.ini文件中?它可能已經把工作搞糊塗了! ;)

你通過瀏覽器查看輸出HTML(查看> Page Source),你得到的是http://js/file.jssrc="http://js/file.js"在標籤中嗎?添加http://domain.com/應該是瀏覽器的工作,而不是服務器。某些瀏覽器顯示已添加域的URL,而其他瀏覽器則準確顯示您發送到該頁面的內容。您是否發送可能缺少域名的標籤?我認爲它只適用於相對於的URI,但它值得檢查。你真的使用js/file.js或/js/file.js嗎?他們非常不同。

+0

這是瀏覽器在做!但我也是我的錯。我把答案作爲修正 – earl3s

+0

你的回答讓我思考了正確的方向,非常感謝。 – earl3s