【问题标题】:Rewriting Root Directory Path "/" for Javascript为 Javascript 重写根目录路径“/”
【发布时间】:2011-09-19 07:55:03
【问题描述】:

我们可以使用修改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/call not /application/some/path/我/打电话,

解决这个问题 我可以定义一个静态变量,比如

var root = "application/";

并在类似的地方使用它

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

但是对于单一用途,将路径定义为静态可能没什么大不了的,但是当应用程序增长时,某些修改会导致我更改我在 js 部分中给出的所有路径。我想,这将是明智的,就像,我在 PHP 中使用 &lt;img src="/resources/img1.jpg" /&gt;

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

【问题讨论】:

  • 问题是什么? “修改根目录”是什么意思?
  • 它们都在服务器端处理。那么你想和 JS 达成什么协议呢?
  • @Stein G. Strindhaug,我不知道比告诉你我想修改根目录路径以便在 javascript 中使用更清楚
  • 什么是 JavaScript 中的“根目录路径”?
  • @Starx 为什么要更改客户端的 url。为什么不让它成为example.com/ 你的其他相对网址应该可以工作。

标签: javascript directory


【解决方案1】:

已编辑:尝试回答更新后的问题 假设 JavaScript 是从 index.html 文件中调用的,如果您插入一个 img 标记并使用相对 url,它们将相对于索引文件的路径。所以&lt;img src='application/resources/img1.jpg'&gt; 可以正常工作。如果脚本应该适用于多个子级别(例如,如果页面“application/etc/etc2/somePage.html”需要来自“application/resources/”的图像),则使用绝对 url 可能更容易,您可以包含一个 javascript 块在 php 生成的每个页面上,其中包含应用程序“根”的绝对 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
  • 为什么你认为这个答案很有用? @Voter,拜托,我想知道......这个答案对我的问题有什么用
  • 我已经尽我所能回答了原始问题的措辞...既然你更新了你的问题,我已经更新了我的答案。
  • @Starx 仅仅为了抵消你高度消极的态度就值得一票。
【解决方案2】:

我曾经做过这样的东西,用来设置

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

...类似的东西,为了演示目的而被黑掉了。

【讨论】:

  • 您能否详细说明您的答案。 Something along those lines ???????????????
  • 对不起,我写了一些 php 但它被过滤器删除了。我已经用更多细节更新了答案。
  • 那么,window.app_absolute 将包含什么?当前文件,我认为的相对路径
  • 给定 FILE 目录的公开翻译目录。然而,这不适用于 apache 中的别名,如 /~user/ 文件夹等,我总是不得不在应用程序级别手动指定这些别名。
猜你喜欢
  • 1970-01-01
  • 2011-04-13
  • 1970-01-01
  • 2013-12-30
  • 2016-01-12
  • 1970-01-01
  • 2014-04-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多