使用mod_vhost_别名的Apache虚拟主机

使用mod_vhost_别名的Apache虚拟主机,apache,ubuntu,hosting,virtual,mod-vhost-alias,Apache,Ubuntu,Hosting,Virtual,Mod Vhost Alias,我正在尝试设置apache模块,以便动态地将所有请求定向到特定文件夹,然后将该名称与相同名称的文件夹相匹配 为此,我在sites available文件夹中的000 default.conf文件中设置了以下内容 UseCononicalName关闭 VirtualDocumentRoot/var/www/example/%2 这很有效 然后我想设置几个不同的域,使其不指向示例文件夹,而是指向其他地方,因此我在VirtualDocumentRoot行之前添加了几个域: ServerName su

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

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

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

这很有效

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


ServerName sub1.example.com
VirtualDocumentRoot/var/www/sub1.example.com

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

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

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


ServerName sub1.example.com
VirtualDocumentRoot/var/www/sub1.example.com


ServerName sub2.example.com
VirtualDocumentRoot/var/www/sub2.example.com


ServerName sub3.example.com
VirtualDocumentRoot/var/www/sub3.example.com

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


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

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

编辑:

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

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

因此,要设置apache2,使用mod_vhost_别名让所有域指向具有相同名称的通用文件夹,但将特定域指向其他位置,这就是您需要做的

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

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

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

ServerName example.com
服务器别名www*
文档根路径/到/您的/文件夹
然后添加下一个块,将所有其他通用域指向通用文件夹:

<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>

ServerName vhosts.fqdn
服务器别名www*
VirtualDocumentRoot路径/to/your/folder/%2+
ServerName vhosts.fqdn
服务器别名*
VirtualDocumentRoot路径/to/your/folder/%1+
第一个块将把所有域(从www.开始)定向到与www.后的名称匹配的文件夹。 第二个块是在未指定www.时,将相同的域定向到同一文件夹


有关要在文档根目录中使用的动态海量虚拟主机选项的更多信息,请转到:

我使用了VirtualDocumentRoot,因为在一个示例中,Apache网站上正以这种方式使用它。但是,我尝试了你的解决方案,结果并没有改变。好吧,我设法解决了这个问题,而你的建议实际上是让它工作所需要的一部分。非常感谢。我已经对你的答案投了赞成票,但也发布了解决问题的详细说明