我们可以使用
修改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" />
我尽力解释这个问题,如果仍然不可理解,请社区,让他们帮助他们理解。我欢迎你编辑我的问题。
答案 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));
}
......出于演示目的,为了示范目的而被黑客攻击。