使用mod_vhost_alias的Apache虚拟主机

时间:2014-04-14 06:51:08

标签: apache ubuntu hosting virtual mod-vhost-alias

我正在尝试设置我的apache模块,将所有请求动态定向到特定文件夹,然后将名称与同名文件夹匹配。

为此,我在sites-available文件夹中的 000-default.conf 文件中设置了以下内容。

  

UseCanonicalName Off
  VirtualDocumentRoot / var / www / example /%2

这很有效。

然后我想设置几个不同的域不指向示例文件夹,但是在其他地方,所以我在VirtualDocumentRoot行之前添加了几个:

  

< VirtualHost *:80>
   ServerName sub1.example.com
   VirtualDocumentRoot /var/www/sub1.example.com
  < /虚拟主机>

但是,现在动态指向不再起作用,并且所有URL都被重定向到第一个 - > VirtualDocumentRoot位置。

有人可以告诉我我做错了什么吗?

完整代码示例在 apache2 / sites-available / 000-default.conf

  

< VirtualHost *:80>
   ServerName sub1.example.com
   VirtualDocumentRoot /var/www/sub1.example.com
  < /虚拟主机>

     

< VirtualHost *:80>
   ServerName sub2.example.com
   VirtualDocumentRoot /var/www/sub2.example.com
  < /虚拟主机>

     

< VirtualHost *:80>
   ServerName sub3.example.com
   VirtualDocumentRoot /var/www/sub3.example.com
  < /虚拟主机>

     

UseCanonicalName Off
  VirtualDocumentRoot / var / www / example /%2

2 个答案:

答案 0 :(得分:2)

不要将VirtualDocumentRoot用于简单的虚拟主机,只能使用DocumentRoot

VirtualDocumentRoot定义了mass-virtualhost catch-all,根据定义,你只能有一个mass-virtualhost(否则apache怎么知道给定主机名应该匹配哪个VH)。

修改

现在您需要进行一些其他更改:    - 确保在apache配置中有NameVirtualHost *:80(除非您使用Apache 2.4)。    - 将Mass-Virtualhost移动为优先,因此它将成为默认虚拟主机。当请求主机名不是任何ServerName指令时,将使用默认的虚拟主机。 (您可以通过使用-S选项运行apache来检查默认VH。)

答案 1 :(得分:1)

我已经想出了如何做到这一点,并决定在这里为其他遇到类似问题的人发布解决方案:

设置apache2,使用mod_vhost_alias让所有域指向一个具有相同名称的通用文件夹,但指向其他地方的特定域,这就是你需要做的。

在000-default.conf站点配置文件中,编写以下代码:

UseCanonicalName Off

然后为要指向特定文件夹的每个特定域添加以下块,将 example.com 替换为您的域名:

<VirtualHost *:80>
 ServerName example.com
 ServerAlias www.*
 DocumentRoot path/to/your/folder
</VirtualHost>

然后添加下一个块以将所有其他通用域指向通用文件夹:

<VirtualHost *:80>
 ServerName vhosts.fqdn
 ServerAlias www.*
 VirtualDocumentRoot path/to/your/folder/%2+
</VirtualHost>

<VirtualHost *:80>
 ServerName vhosts.fqdn
 ServerAlias *
 VirtualDocumentRoot path/to/your/folder/%1+
</VirtualHost>

第一个块将指向所有域,从www开始。到www后面的名称的文件夹。 当没有www时,第二个块是指向相同的域。被指定到同一文件夹。

有关要在文档根目录中使用的动态群发虚拟主机选项的更多信息,请转到:http://httpd.apache.org/docs/2.2/mod/mod_vhost_alias.html