2014-08-27 76 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

相关问题