2016-07-29 96 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/然後他們看到這是你的文檔根目錄以外的文件夾並將其顯示在瀏覽器中的目錄中包含的文檔根目錄下..

有一件事要考慮的是,如果你有虛擬主機,那麼一個別名適用於每個虛擬主機,所以嘗試使用別名的罕見名稱。

希望這會有幫助