2014-08-27 78 views
6

我可能會問一個非常愚蠢的問題,但我無法找到一種方法去做我想做的事。將子目錄作爲apache的根目錄處理

我想在http://example.com/MyNewProject

項目上傳到我的服務器在每個網頁上的I包括文件,做所有的進口樣式表中,JavaScript的等等。我不想向客戶提供全方位路徑每次我只想要能夠做/MyStylesheet.css

我的主要網站文檔根目錄是/var/www/html/example,我的新項目目錄存儲在/var/www/html/example/MyNewProject

我想要的是在我的導入中,當我做/MyStylesheet.css而不是去我的服務器主Web目錄時,它會去/ var/www/html/example/MyNewProject以獲取CSS。

我嘗試添加以下到我的Apache的配置文件:

Alias /NewProjectTemplate "/var/www/html/example/NewProjectTemplate" 
Alias /NewPRojectTemplate/ "/var/www/html/example/NewProjectTemplate" 

<Directory "/var/www/html/example/NewProjectTemplate"> 
     Options Indexes FollowSymLinks Includes 
     AllowOverride All 
     XBitHack On 
     Order allow,deny 
     Allow from all 
</Directory> 

這不幸的是沒有工作,所以我也嘗試添加以下到我的virtualhosts文件

<VirtualHost *:80> 
DocumentRoot /var/www/html/example/NewProjectTemplate 
ServerName example.com/NewProjectTemplate 
</VirtualHost> 

我在Google上瀏覽過,但找不到任何具體的東西,我發現的唯一的東西是使用重寫引擎,但這看起來有些複雜,OTT滿足我的需求。

感謝您提供的任何幫助。

UPDATE

OK,我得遠一點,雖然不是很多,我敢肯定,它不應該是這個複雜的。

而不是使用虛擬主機,我現在使用別名以下是我已經添加到我的httpd.conf文件

DocumentRoot "/var/www/html" 
Alias /NewTemp/ "/var/www/html/example/NewProjectTemplate/" 
Alias /NewTemp "/var/www/html/example/NewProjectTemplate" 

<Directory "/var/www/html/example/NewProjectTemplate/"> 
     Options FollowSymLinks Includes 
     AllowOverride all 
</Directory> 

<Directory "/var/www/html/example/NewProjectTemplate"> 
     Options FollowSymLinks Includes 
     AllowOverride all 
</Directory> 

在我的HTML代碼在我的SSI我做以下內容:

<!--#include file="includes/imports.html"--> 

正如您所看到的,這是一個相對路徑,Includes包含在NewProjectTemplate的根目錄中。但是,這是一個模板文件,所以我希望它始終能夠到根目錄來查找該文件,因此無論網站有多深入,它都能保證正常工作。例如,如果我行更改爲下面的話,我得到一個錯誤error processing directive

<!--#include file="/includes/imports.html"-->

所以即使作品,未經/但不與斜線,如果我不包括斜線所以然後該導入工作,imports.html文件內的導入工作,即使它們包含前導斜槓,因此它始終會轉到根目錄。下面是我的HTML文件,進口

<link rel="stylesheet" type="text/css" href="/StyleSheet.css"> 
<link rel="stylesheet" type="text/css" href="/navigation/top-nav.css"> 
<link rel="stylesheet" type="text/css" href="/navigation/side-nav.css"> 
<script type="text/javascript" src="/scripts/jquery.js"></script> 
<script type="text/javascript" src="/scripts/menu.js"></script> 

所以我只想澄清,如果將#include文件= includes/imports.html的SSI指令作品和/StyleSheet.css導入成功,即使它擁有領先的斜線。如果我添加一個/到SSI的路徑,那麼它不會被導入。

但是,這裏是它變得更加怪異的地方。

如果我然後將另一個文件添加到子目錄中,例如NewProjectTemplate/MySubDirectory,然後添加SSI爲../includes/imports.html它仍然無法正常工作。它就像#include文件中的SSI指令一樣,期望該文件位於相同的工作目錄中。

希望這是有道理的

+0

在我們的PHP代碼中,我們創建了一個分析當前URL的環境目標,並基於URL中的子目錄,決定了我們的「baseWebPath」。這是基於模板的解決方案的基礎,無論腳本的位置如何,我們都可以使用相同的相對路徑包含我們的javascript和css,例如「javascript/myscript.js」。據推測,你正試圖避免像「../javascript/myscript.js」和「../../javascript/myscript.js」之類的引用。我的建議是採用基於PHP的方法,而不是試圖找到基於Apache的解決方案。 – Steven 2014-09-05 17:15:15

回答

0

那麼,你有沒有在虛擬主機中這樣嘗試?

<VirtualHost *:80> 
    ServerAdmin [email protected] 
    DocumentRoot "/var/www/html/example/" 
    ServerName example.local 
    ServerAlias example.local 
    <Directory "/var/www/html/example/"> 
     Options All Includes Indexes FollowSymLinks 
     Order allow,deny 
     Allow from all 
     AllowOverride All 
    </Directory> 

    Alias /NewProjectTemplate /var/www/html/example/NewProjectTemplate 
    <Directory "/var/www/html/example/NewProjectTemplate"> 
     Order allow,deny 
     Allow from all 
    </Directory> 
</VirtualHost> 

希望它可以幫助這個時候..

+0

這不是我問的,這是有效地改變我的網絡服務器的域名。該URL應該仍然是http://example.com/NewProjectTemplate但NewProjectTemplate被視爲根 – Boardy 2014-08-28 10:43:15

+0

更新了答案,希望它可以幫助... – pecci 2014-08-28 12:05:44

+0

謝謝我現在已經嘗試過,但似乎沒有工作。我仍然得到PHP錯誤,說它找不到/includes/imports.html。 /包含在NewProjectTemplate的根目錄中。所以我認爲它必須在Web服務器根目錄 – Boardy 2014-08-28 12:28:51

相關問題