我正在尝试设置我的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
2 回答
不要将
VirtualDocumentRoot
用于简单的虚拟主机,仅使用DocumentRoot
.VirtualDocumentRoot
定义了mass-virtualhost catch-all,根据定义,你只能有一个mass-virtualhost(否则apache怎么知道给定主机名应该匹配哪个VH) .Edit:
现在您需要进行一些其他更改: - 确保您在apache配置中使用
NameVirtualHost *:80
(除非您使用Apache 2.4) . - 将Mass-Virtualhost移动为 first ,因此它将成为 default 虚拟主机 . 当请求主机名不是任何ServerName
指令时,使用默认的虚拟主机 . (您可以通过使用-S选项运行apache来检查默认VH) .我已经想出了如何做到这一点,并决定在这里发布解决方案给其他遇到类似问题的人:
因此,要设置apache2,使用mod_vhost_alias将所有域指向具有相同名称的通用文件夹,但指向其他位置的特定域,这是您需要执行的操作 .
在000-default.conf站点配置文件中,编写以下代码:
然后为要指向特定文件夹的每个特定域添加以下块,将 example.com 替换为您的域名:
然后添加下一个块以将所有其他通用域指向通用文件夹:
第一个块将指向所有域,从www开始 . 到www之后与名称匹配的文件夹 . 当没有www时,第二个块是指向相同的域 . 被指定到同一文件夹 .
有关要在文档根目录中使用的动态质量虚拟主机选项的更多信息,请转至:http://httpd.apache.org/docs/2.2/mod/mod_vhost_alias.html