3

我正在尝试设置我的 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
</VirtualHost>

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

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

apache2/sites-available/000-default.conf 中的完整代码示例:

<VirtualHost *:80>
ServerName sub1.example.com
VirtualDocumentRoot /var/www/sub1.example.com
</VirtualHost>

<VirtualHost *:80>
ServerName sub2.example.com
VirtualDocumentRoot /var/www/sub2.example.com
</VirtualHost>

<VirtualHost *:80>
ServerName sub3.example.com
VirtualDocumentRoot /var/www/sub3.example.com
</VirtualHost>

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

4

2 回答 2

3

不要VirtualDocumentRoot用于简单的虚拟主机,仅使用DocumentRoot.

VirtualDocumentRoot定义了 mass-virtualhost 包罗万象,根据定义,您只能拥有一个 mass-virtualhost(否则 apache 怎么知道给定主机名应该匹配哪个 VH)。

编辑:

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

于 2014-04-14T10:25:07.167 回答
2

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

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

于 2014-04-24T20:06:49.117 回答