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