我使用 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 进行切片和切块,以及检查目录和文件是否存在。
它可能不如虚拟主机那么快,但实现起来更容易。