我注意到一些托管服务提供商已设置 Apache,因此如果我创建一个目录(foo.example.com),Apache 将自动知道 foo.example.com 的 DNS 条目路由到该文档根目录。
我要做的是设置如下内容:
<VirtualHost *:80>
ServerName *.example.com
DocumentRoot /home/user/*.example.com
</VirtualHost>
其中 DocumentRoot 将根据 ServerName 通配符的模式进行匹配。
这样,我需要做的就是/home/user/foo.example.com
在配置完成后进行创建,而无需修改 Apache 中的任何内容。这样我就可以动态添加子域,而无需重新启动或重新加载,甚至无需编辑 Apache 中的任何内容。
用例可能是这样的。
mkdir /home/user/baz.example.com/
- ??????
- 利润
我不需要做任何事情,只需创建目录即可。
答案1
VirtualDocumentRoot
应该可以解决问题。
<VirtualHost *:80>
ServerName catchall.invalid
ServerAlias *
VirtualDocumentRoot /home/user/%0
</VirtualHost>
答案2
我之前合作过的网站公司也做过类似的事情,我们不是在 Apache 配置中进行硬编码,而是将配置存储在数据库中,这样我们就可以随时更新它,并且它会在我们需要的时候进行调整。
http://blog.straylightrun.net/2009/07/31/storing-apache-virtual-hosts-in-a-database/
是我们用来实现这一目标的一篇博客文章。
http://code.google.com/p/dbd-modules/wiki/mod_vhost_dbd
mod vhost dbd wiki,关于在数据库中存储 vhost 配置的好信息。
答案3
我想我没有足够的 karma 来添加评论,所以我会添加一个答案。Steve Madden 的答案是正确的。
如果您想在本地机器上创建一个开发域(例如 mycomputer.dev),您可以使用该VirtualDocumentRoot
技巧并运行本地 DNS 服务器来实现。然后,当您想要启动一个新网站时,只需创建目录即可。无需编辑 Apache,无需编辑主机文件,无需重新启动 Apache。
这篇博客文章是关于 *nix 的操作方法:
http://blog.sznapka.pl/dynamic-lamp-setup-for-localhost-development/
Windows 上的操作方法如下:
http://blog.straylightrun.net/2010/05/10/throw-away-your-hosts-file-developing-locally-with-bind/
答案4
如果你“只”想做你在问题最后一部分所表达的事情,那么就这样做:
<VirtualHost *:80>
ServerName *.example.com
DocumentRoot /home/user/foo.example.com
</VirtualHost>
您已设置完毕。