apache2.4中wildcard subdomain的virtualhost wildcard subdomain

Virtualhost wildcard subdomain of wildcard subdomain in apache2.4

目前,我已经完成了如下通配符子域配置:

<VirtualHost *:80>
    ServerAlias *.domain
    ErrorLog /tmp/error.log
    CustomLog /tmp/access.log combined
    VirtualDocumentRoot /var/www/%1/public
<Directory "/var/www">
    DirectoryIndex index.php
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>
</VirtualHost>

但是如果我输入 sub.sub.domain 将 return 到默认虚拟主机。如何配置到 main/root 域的路径?我在 conf 下尝试但仍然没有工作:

<VirtualHost *:80>
    ServerAlias *.*.domain
    ErrorLog /tmp/error.log
    CustomLog /tmp/access.log combined
    VirtualDocumentRoot /var/www/%2/public
<Directory "/var/www">
    DirectoryIndex index.php
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>
</VirtualHost>

我将 %2 更改为 %1 仍然无效。

什么是正确的语法?

上面的代码语法正确,但我只是把它放在了错误的位置顺序上。所以正确答案是把第二个放在第一个上面。

下面是完整的配置示例:

<VirtualHost *:80>
    ServerAlias *.*.domain
    ErrorLog /tmp/error.log
    CustomLog /tmp/access.log combined
    VirtualDocumentRoot /var/www/%2/public
<Directory "/var/www">
    DirectoryIndex index.php
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>
</VirtualHost>

<VirtualHost *:80>
    ServerAlias *.domain
    ErrorLog /tmp/error.log
    CustomLog /tmp/access.log combined
    VirtualDocumentRoot /var/www/%1/public
<Directory "/var/www">
    DirectoryIndex index.php
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>
</VirtualHost>

Apache 与 skipping/ignore 相同的 subdomain/domain 配置,从顶部升序排列。 sub.sub.domain 也是 *.domain 的一部分,所以如果我想配置它,我必须将配置放在顶部,或者如果使用不同的文件配置,请使用较低的数字名称。

多个 ServerAlias 或 ServerName 或 NameVirtualHostlines 将产生 "NameVirtualHost *:80 has no VirtualHosts" 警告。不过,Apache 将忽略第二个指令并使用第一个定义的 NameVirtualHost 行。这似乎发生在一个人使用多个虚拟主机配置文件并且不明白你只需要定义一个特定的 NameVirtualHost 行一次

reference

简单的解决方案,但我解决了几个小时,我希望它能帮助像我一样的其他人。