Apache:基于反向 DNS 表示法在 Virtualhost 部分内动态设置 Documentroot

Apache: Dynamically set Documentroot inside Virtualhost Section based on reverse-DNS Notation

我们想通过 VHosts 设置一个 apache-server 来执行以下操作: 我们希望根据域名(包括子域,因此级别的数量可能会有所不同)及其作为目录名称的反向域名表示法(反向 DNS)将我们的多个域中的每一个路由到它们相应的位置。

例如,我们希望将 admin.example.com 路由到 /domains/com.example.admin/public,将 myshop.net 路由到 /domains/net.myshop/public

我们知道要在没有反向 DNS 的情况下实现这一点,配置应该如下所示(基于 this post and the mod_vhost_alias documentation):

<VirtualHost *:80>
    UseCanonicalName Off
    VirtualDocumentRoot "/domains/%0/public"
</VirtualHost>

文档只讨论了在域名部分重新排列单个字母。

我们可以考虑这样的解决方案:

<VirtualHost *:80>
    UseCanonicalName Off
    VirtualDocumentRoot "/domains/%-1.0.%-2.0.%-3.0.%-4.0.%-5.0.%-5.0.%-6.0/public"
</VirtualHost>

但我们可以想象,当域名部分较少(或不太可能更多)时,它将无法工作或累积 leading/trailing 点或其他东西。

那么这可能吗?如果可以,我们如何实现?

我遇到了同样的问题,我认为没有办法只颠倒域名中各部分的顺序。但我最终使用了这个丑陋的解决方案。只是有多个 VirtualHost 定义,每个通配域的深度不同。

#For domains 5 levels deep like 'test1.project.dev.mydomain.com'
<VirtualHost *:80>
  ServerAlias *.*.*.*.com
  VirtualDocumentRoot /webroot/%-1.0.%-2.0.%-3.0.%-4.0.%-5.0/
</VirtualHost>

#For domains 4 levels deep like 'project.dev.mydomain.com'
<VirtualHost *:80>
  ServerAlias *.*.*.com
  VirtualDocumentRoot /webroot/%-1.0.%-2.0.%-3.0.%-4.0/
</VirtualHost>

#For domains 3 levels deep like 'www.mydomain.com'
<VirtualHost *:80>
  ServerAlias *.*.com
 VirtualDocumentRoot /webroot/%-1.0.%-2.0.%-3.0/
</VirtualHost>