使用mod_vhost_alias的Apache虚拟主机



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

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

UseCanonicalName关闭
VirtualDocumentRoot/var/www/example/%2

这很有效。

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

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

然而,现在动态指向不再工作,所有URL都被重定向到第一个->VirtualDocumentRoot位置。

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

完整代码示例在apache2/站点可用/000 default.conf中:

<;虚拟主机*: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
</VirtualHost>

UseCanonicalName关闭
VirtualDocumentRoot/var/www/example/%2

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

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

编辑:

现在您需要一些其他更改:-确保您在apache配置中的某个位置有NameVirtualHost *:80(除非您使用Apache2.4)。-首先将Mass Virtualhost移动为,使其成为默认虚拟主机。当请求主机名与任何ServerName指令都不匹配时,将使用默认的虚拟主机。(您可以通过运行带有-S选项的apache来检查默认VH)。

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

所以要设置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

最新更新