簡體   English   中英

為Javascript重寫根目錄路徑“/”

[英]Rewriting Root Directory Path “/” for Javascript

我們可以使用修改PHP的文檔根目錄路徑

$_SERVER['DOCUMENT_ROOT'] = "to/some/new/directory";
//Now the "/" which represent the ^(above) path

在.htaccess我們有

RewriteBase "/to/some/new/directory"

現在,我需要修改在javascript中使用的根目錄路徑。 怎么做?

目前,我正在聲明一個變量,其中包含我的個性化根目錄的靜態路徑並將其用作

var root = "../to/new/path";
document.location = root+"/somepage.php";

腳本

我想我應該對這個場景說一點,讓你們抓住我的想法

默認Web根目錄

http_docs/

里面包含一個主文件夾

http_docs/application <-- contains the actual application
http_docs/js <-- contains the script
http_docs/index.html

現在,該應用程序還包含用於更新,編輯,加載新內​​容或其他資源的ajax功能,如果在“/”處訪問將表示在/ some / path / i /被叫/ not / application / some / path / i /被調用,

為了解決這個問題,我可以定義一個靜態變量

var root = "application/";

並在某處使用它

$.post(....., function(data) { $(body).append("<img src='"+root+"resources/img1.jpg"); });

但是對於一次性使用,將路徑定義為靜態可能不是什么大問題,但是,當應用程序增長時,某些修改會導致我改變我在js部分中給出的所有路徑。 我想,這是明智的,就像我用PHP做的那樣,使用<img src="/resources/img1.jpg" />

我盡力解釋這個問題,如果仍然不可理解,請社區,讓他們幫助他們理解。 我歡迎你編輯我的問題。

編輯:嘗試回答更新的問題假設從index.html文件中調用JavaScript,如果插入img標記並使用相對URL,它們將相對於索引文件的路徑。 所以<img src='application/resources/img1.jpg'>可以正常工作。 如果腳本應該適用於幾個子級別(例如,如果頁面“application / etc / etc2 / somePage.html”需要來自“application / resources /”的圖像),則可能更容易使用絕對URL,並且您可以包含一個javascript塊在php生成的每個頁面上,它保存應用程序“root”的絕對URL,如:

<!-- included by php in all html pages, e.g. in defautlHeadter.php -->
<script type="text/javascript">
   var rootUrl = "<?= getTheRootUrl() ?>";
</script>

其中getTheRootUrl()是一個方法或服務器變量,它提供您需要的根URL。 如果url被翻譯/重新映射(通過apache等在php可見的范圍之外),你可能需要在php方法中對根URL進行硬編碼,但至少如果你改變了根目錄,它只會改變一個文件。

然后,您可以使用根URL在應用程序/網站中的任何位置使用rootUrl + "/some/relative/path"在應用程序的任何位置指定絕對路徑。

我曾經做過類似這樣的事情

window.app_absolute = '<?php echo GetRelativePath(dirname(__FILE__)); ?>'

我也用這樣的東西

static function GetRelativePath($path)
{
    $dr = $_SERVER['DOCUMENT_ROOT']; //Probably Apache situated

    if (empty($dr)) //Probably IIS situated
    {
        //Get the document root from the translated path.
        $pt = str_replace('\\\\', '/', Server::GetVar('PATH_TRANSLATED',
            Server::GetVar('ORIG_PATH_TRANSLATED')));
        $dr = substr($pt, 0, -strlen(Server::GetVar('SCRIPT_NAME')));
    }

    $dr = str_replace('\\\\', '/', $dr);

    return substr(str_replace('\\', '/', str_replace('\\\\', '/', $path)), strlen($dr));
}

......出於示范目的,這些東西被砍掉了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM