Apache 上跨多个域的动态子域

Apache 上跨多个域的动态子域

我使用 Ubuntu/Apache 运行 Web 服务器,正在寻找一种跨多个域动态托管子域的方法。我已经摆弄 Apache 几天了,但还没有完全修复。

这是我正在寻找的工作流程:

  • 如果 HTTP_HOST 前面有“www”,请忽略它。

  • 如果包含子域名,请检查是否存在相应的文件夹~/server/

  • 如果文件夹存在,则将该文件夹设置为文档根目录。
  • 如果不存在,则设置~/server/www为文档根目录。

  • 多级子域名需要路由到基级子域名。例如,http://another.sub.domain.tld/应默认为~/server/sub

  • 如果没有请求子域名,则使用~/server/www

文件夹结构:

/home/ [domain w/o extension] /server/ [subdomain, default 'www']

例如:http://sub.domain.tld/火柴/home/domain/server/sub

以下是我目前使用 mod_vhost_alias 得到的结果:

UseCanonicalName Off
VirtualDocumentRoot /home/%-2/server/%-3

仅此一点就足以满足:

  • http://www.domain.tld/- 寻找~/server/www
  • http://subdomain.domain.tld- 寻找~/server/subdomain
  • http://www.subdomain.domain.tld- 寻找~/server/subdomain

但它不能满足http://domain.tld/。(寻找~/server/domain

此外,如果~/server/subdomain不存在,它将返回 404。

简而言之,我希望每个子域都有自己的文件夹,如果不存在则~/server/默认为文件夹。~/server/www

我想避免使用 mod_rewrite,因为它不会更改文档根目录;它只会在请求中添加一个目录。但是,作为最后的手段,我可​​能会更改文件夹结构。

答案1

您可以使用 apache 的 mod_rewrite 来执行此操作,而根本不使用虚拟主机。它可以对 URL 进行切片和切块,以及检查目录和文件是否存在。

它可能不如虚拟主机那么快,但实现起来更容易。

相关内容