将子目录作为apache的根目录处理

时间:2014-08-27 22:30:03

标签: html apache

我可能会问一个非常愚蠢的问题,但我找不到办法去做我想做的事。

我想将项目上传到我的服务器http://example.com/MyNewProject

在每个网页中,我都包含一个文件,该文件执行StyleSheets,javascript等的所有导入。我不希望每次只想提供完整路径/MyStylesheet.css < / p>

我的主要网站文档根目录是/var/www/html/example,我的新项目目录存储在/var/www/html/example/MyNewProject中。

当我执行/MyStylesheet.css而不是访问我的服务器主网页目录时,我想要的是导入,它将转到/ 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>

这很遗憾没有用,所以我也尝试将以下内容添加到我的虚拟主机文件

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

我在谷歌上环顾四周但找不到具体的东西,我发现的唯一一件事就是使用重写引擎,但这看起来有点太复杂了,OTT也符合我的需要。

感谢您提供的任何帮助。

更新

好的,我还有一点,虽然不是很多,但我确信它不应该是这么复杂。

我现在使用别名而不是使用虚拟主机,而下面是我添加到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>

在我的SSI中的HTML代码中,我正在执行以下操作:

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

正如您所看到的,这是一个相对路径,而且包含在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指令要求文件位于同一个工作目录中。

希望这是有道理的

2 个答案:

答案 0 :(得分:0)

那么,你在虚拟主机中尝试过这样吗?

<VirtualHost *:80>
    ServerAdmin emailaddress@domain.com
    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>

希望这次有所帮助..

答案 1 :(得分:0)

偶然偶然发现了这个非常古老的威胁。 如果只希望将子目录视为根目录,则不需要主机或别名。

方法是修改httpd.conf,在那里您会找到

<Directory>

只需更新此行并添加

<Directory "your/server/root/original_path/subpath">
    # your options
</Directory>