2016-07-29 149 views
0

我在本地主机上写了一个HTML/CSS/JS项目。 项目根目录位于http://localhost/projects/project1/HTML项目路径混淆

我想知道是否有可能使HTML文件对待我的项目 根作为其基地URL,以便引用同一个JavaScript/CSS文件 不依赖于HTML文件的路径(除非我参考相对于当前目录 )。

这里是我的项目结构:

  • 项目

    • PROJECT1

      • 的index.html
      • 页(目录)
      • page1.html
      • page2.html

      • 应用(目录)

      • APP1(目录)

        • 的index.html
        • 的style.css
        • app.js
      • 个DEPS(目录)

      • 的jquery.js

正如你所看到的,指的jquery.js我/projects/project1/index.html内,
我必须写:

<script src="deps/jquery.js"></script> 

要参考/projects/project1/pages/index1.html里面的jquery.js,
我得w仪式

<script src="../deps/jquery.js"></script> 

要引用的jquery.js内http://localhost/projects/project1/apps/app1/index.html
我必须写

<script src="../../jquery.js"></script> 

在我不知道我写的../ S上的正确数量这点,并可以很容易地 原因错误。

更糟的是,如果我重新排列我的目录或重新命名它们,这意味着我必须再次处理 重写路径,这可能非常令人生畏。

我想过各种方法来解决他们没有一个是吸引人的(尽管选项3接近)。


思想/尝试:

  1. 我试着用的.htaccess RewriteEngine叙述/ RewriteBase但是毫无效果播放。
  2. 我可以为每个项目创建一个新的服务器,因为NodeJS很容易实现。 这样,每个服务器都有一个目录作为它的静态路径,并且是'/'。 这种方法的问题是,这个管理很多服务器立即在不同的端口上,这可能会造成混淆。
  3. 我可以通过

    SetEnv PROJECT_PATH /projects/project1/ 
    

    设置在.htaccess绝对路径变量但是这样做就意味着我要打开我的.htaccess文件夹移动 或将其重命名和更改PROJECT_PATH各一次。这看起来很简单,但如果您将项目给予别人,他们不知道.htaccess如何工作, 解释如何找到此路径以及如何更改它, 甚至更​​有问题如果.htaccess比一行更长。

    理想情况下,我希望这个SetEnv找出它本身在里面的文件夹, ,但我不知道如何做到这一点。这也存在一个问题,即路径依赖于PHP预处理,这使得转移到另一个没有.htaccess或PHP的服务器(如NodeJS)(它仍然可以调用PHP,但即使如此,它需要处理.htaccess )。


我想知道是否有可能要么

  1. 让.htaccess文件创建一个包含这个特殊的.htaccess文件的路径推导出一个 环境变量,所以内部的PHP文件此目录可以执行 相对于$_ENV{PROJECT_ROOT}的路径。这样,如果项目被移动或共享,它仍然可以工作,无需修改.htaccess。

  2. 使.htaccess强制包含在相同或较低目录中的所有“/”引用将该目录视为根的HTML文件。

或者如果还有其他事情可以解决这个问题,我还没有想到。

提前致谢。

+0

为什么你不能使用相关网址? –

+0

,因为我想在每个引用它的文件中以相同的方式引用相同的依赖关系,否则项目变得难以改变,并且很难缩放。它也使生成html文件变得更困难。 – Dmitry

回答

0

德米特里,你可以试试这个:

1)在您的文件的httpd.conf,添加以下行结尾:

Redirect permanent /deps http://localhost/projects/project1/deps/ 

2)重新启动Apache服务

3)刷新你的索引页面(/ projects/project1/pages/index1。HTML)

我已经使用了这样的事情:

<html> 
<head> 
<script src="/deps/jquery.min.js"></script> 
</head> 

</html> 

<?php 

echo "welcome to index" 

?> 
+0

这不会导致所有项目都重定向到此位置吗?我有什么其他项目有不同的依赖关系,例如jquery.js是jquery 3而不是2.2,或者如果我想要一个包含每个项目/应用程序不同的app.js的/ scripts目录。我知道硬重定向的工作,但我也可以创建一个/ deps文件夹,并完成相同的事情。我希望它只相对于特定的文件夹。 – Dmitry

+0

如果您的项目使用相同的库,这可能很有用,但如果您需要使用不同的文件夹,请考虑手动重写您的路径... –

+0

我已经为所有项目中的“常见”事情做到了这一点,但它变得困难为“只有这个项目”文件夹,并试图从项目的各个层面引用它们。目前,由于这种限制,我很难编写非平面项目,因为这意味着任何小的更改都需要大量手动更正每个html文件。 – Dmitry

0

如何访问我的文档根目录以外的目录?

这解释了如何让用户访问Windows上目录根目录之外的目录。

假设您的目录位于C:/ www/newfolder /那么您将在您的httpd.conf文件中创建以下内容。

Alias /newfolder/ "C:/www/newfolder/" 

<Directory "C:/www/newfolder"> 
    Options Indexes MultiViews 
    AllowOverride AuthConfig 
    Order allow,deny 
    Allow from all 
</Directory> 

现在,当用户进入www.domain.com/newfolder/然后他们看到这是你的文档根目录以外的文件夹并将其显示在浏览器中的目录中包含的文档根目录下..

有一件事要考虑的是,如果你有虚拟主机,那么一个别名适用于每个虚拟主机,所以尝试使用别名的罕见名称。

希望这会有帮助