0

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

例如,我们想要路由admin.example.com/domains/com.example.admin/publicmyshop.net/domains/net.myshop/public

我们知道要在没有反向 DNS 的情况下实现这一点,配置应该如下所示(基于这篇文章mod_vhost_alias 文档):

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

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

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

4

1 回答 1

2

我有同样的问题,我认为没有办法只是颠倒域名中各部分的顺序。但我最终使用了这个丑陋的解决方案。只是有多个 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>
于 2022-02-16T16:57:57.617 回答