为Javascript重写根目录路径“/”

时间:2011-06-21 08:33:32

标签: javascript directory

我们可以使用

修改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" />

一样

我尽力解释这个问题,如果仍然不可理解,请社区,让他们帮助他们理解。我欢迎你编辑我的问题。

2 个答案:

答案 0 :(得分:5)

已编辑:尝试回答更新的问题 假设从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进行硬编码,但至少如果你改变了根目录,它只会改变一个文件

然后,您可以使用根网址在应用程序/网站的任何位置使用rootUrl + "/some/relative/path"在应用程序的任何位置指定绝对路径。

答案 1 :(得分:-1)

我曾经做过这样的事情,设置

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));
}

......出于演示目的,为了示范目的而被黑客攻击。